标签:amp solution 利用 data- content == return text code
一个数N(1 <= N <= 10^9)
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。 如果无法分解为2个数的平方和,则输出No Solution
130
3 11 7 9
解:简单的做法是打表之后二分查找(也可以不打表)。
看见别人的更好的方法,是用构造做的,利用
(n-a)^2+(n-b)^2=2*n^2+a^2+b^2-2*n*a-2*n*b(注意:a<=0)。
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 long num, n, a, b, d, x, y, e, r, u; 6 int flag = 0; 7 scanf_s("%ld", &num); 8 n = (long)sqrt((long double)num / 2); 9 d = num - 2 * n*n; 10 a = -n; 11 b = n; 12 x = y = 0; 13 if (d == 0) 14 printf("%ld %ld", n, n); 15 else 16 { 17 while (x >= 0) 18 { 19 x = a * (a - 2 * n); 20 y = b * (b - 2 * n); 21 u = x + y; 22 if (u == d) 23 { 24 e = n - b; 25 r = n - a; 26 e < r ? printf("%ld %ld\n", e, r) : printf("%ld %ld\n", r, e); 27 flag++; 28 } 29 if (u > d) 30 a++; 31 else 32 b--; 33 if (a > 0) 34 break; 35 } 36 if (flag == 0) 37 printf("No Solution\n"); 38 } 39 return 0; 40 }
标签:amp solution 利用 data- content == return text code
原文地址:https://www.cnblogs.com/Ekalos-blog/p/10261164.html