您的位置:首页 > 其它

51NOD - 1080 两个数的平方和【简单二分】

2017-11-21 21:42 239 查看

1080 两个数的平方和

给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。

例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)

Input

一个数N(1 <= N <= 10^9)

Output

共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。

如果无法分解为2个数的平方和,则输出No Solution

Input示例

130

Output示例

3 11

7 9

题意: 注意有多个答案,范围,没有的话输出”No Solution”,等

分析: 先预处理好之后,然后直接枚举二分即可,这里用upper_pound即可,复杂度O(n∗lgn)

参考函数

#include<bits/stdc++.h>
#define ll long long

using namespace std;
const int N = 40000+10;
ll a
;

void init() {
a[0] = 0;
for(int i = 1;i < N;i++) {
a[i] = i*1ll*i;
}
}

int main(){
ios_base::sync_with_stdio(0);
init();
ll n;cin>>n;
bool flg = false;
for(int i = 0;i < N;i++) {
int t = lower_bound(a,a+N,n-a[i]) - a;
if(a[i] + a[t] == n && t >= i) {
flg = true;
cout<<i<<' '<<t<<endl;
}
}
if(!flg) cout<<"No Solution"<<endl;
return 0;
}


如有错误或遗漏,请私聊下UP,thx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: