兩個數的平方和 51Nod 1080

2021-08-04 21:59:32 字數 983 閱讀 8541

給出乙個整數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

sample input

130

sample output

3 11

7 9

思路:看到此題,我首先想到打表,然後在用二分法查詢。打表是從0開始,到sqrt(maxn)結束,
把它們的平方存入陣列裡(方便二分查詢),在寫乙個二分查詢呼叫函式。在主

函式裡面,輸出,不重複,所以從小到大輸出,那麼可以限制一下

for(i=0;i*i*2<=n;i++)(i*i*2<=n)(可以減少時間)查詢時也可以減少時

間,把區間範圍也可以傳遞過去。(不懂得可以看**,**通俗易懂)

#include #include #include #define maxn 1000000000+10

int n;

int num[100000+10];

void f()

int mid(int a,int b,int m)

{ int left=a,right=b,mid;

while(left<=right)

{mid=(left+right)/2;

if(num[mid]>m)

right=mid-1;

else if(num[mid]

51nod 1080 兩個數的平方和

1080 兩個數的平方和 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數n,將n表示為2個整數i j的平方和 i j 如果有多種表示,按照i的遞增序輸出。例如 n 130,130 3 2 11 2 7 2 9 2 注 3 11同11 3算1種 inpu...

51nod1080 兩個數的平方和

給出乙個整數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...

51nod1080 兩個數的平方和

給出乙個整數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...