1080 两个数的平方和
给出一个整数N,将N表示为2个整数i与j的平方之和(i <= j),如果有多种表示,按照i的递增序输出。
例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2(注:3^2 + 11^2同11^2 + 3^2算1种)
输入
一个数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开方 然后再范围内枚举
ps:个人感觉题目有点坑 凭什么 1就可以 0 1 倍的就不可以 0 n
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main() {
int n;
bool flag;
while (scanf("%d", &n)!=EOF){
flag = false;
if(n == 1){
printf(" 0 1\n");
flag = true;
}
for (int i = 1; i < sqrt(n); i++) {
int val = (int)sqrt(n - i * i);
if (i > val) break;
if (i * i + val * val == n) {
flag = true;
printf("%d %d\n", i, val);
}
}
if (!flag) {
printf("No Solution\n");
}
}
return 0;
}