1.問題描述:
四平方和
四平方和定理,又稱為拉格朗日定理:
每個正整數都可以表示為至多4個正整數的平方和。
如果把0包括進去,就正好可以表示為4個數的平方和。
比如:5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
(^符號表示乘方的意思)
對於乙個給定的正整數,可能存在多種平方和的表示法。
要求你對4個數排序:
0 <= a <= b <= c <= d
並對所有的可能表示法按 a,b,c,d 為聯合主鍵公升序排列,最後輸出第乙個表示法
程式輸入為乙個正整數n (n<5000000)
要求輸出4個非負整數,按從小到大排序,中間用空格分開
例如,輸入:
5則程式應該輸出:
0 0 1 2
再例如,輸入:
12則程式應該輸出:
0 2 2 2
再例如,輸入:
773535
則程式應該輸出:
1 1 267 838
2.問題分析:
既然a,b,c,d是非遞減序,也就是a<=b<=c<=d,並且呢,a^2+b^2+c^2+d^2=n。
不妨設a^2>n/4,那麼a^2+b^2+c^2+d^2>n,矛盾。
對於b的初始值為a,不妨設b^2>n/3, 那麼b^2+c^2+d^2>n,矛盾。
同理,得到c,d的上界。
這樣我們進行了稍微的程式優化。
3.程式如下:
#include void fun(int n)}}
} }}int main()
列舉 四平方和定理
include includeint main return 0 又稱為拉格朗日定理 每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。比如 5 0 2 0 2 1 2 2 2 7 1 2 1 2 1 2 2 2 符號表示乘方的意思 對於乙個給定的正整數...
8 四平方和
題目描述 四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。比如 5 0 2 0 2 1 2 2 2 7 1 2 1 2 1 2 2 2 符號表示乘方的意思 對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對4個...
2016 8 四平方和
四平方和定理,又稱為拉格朗日定理 每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示為4個數的平方和。5 0 2 0 2 1 2 2 2 7 1 2 1 2 1 2 2 2 對於乙個給定的正整數,可能存在多種平方和的表示法。要求你對4個數排序 0 a b c d 並對所有...