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