列舉的技巧01(能夠少用一層迴圈) 四平方和

2021-10-02 16:40:27 字數 679 閱讀 7382

題目:四平方和定理,又稱為拉格朗日定理:每個正整數都可以表示為至多4個正整數的平方和。如果把0包括進去,就正好可以表示位4個數的平方和。

比如:5 = 0 ^2 + 0 ^2 + 1 ^2 + 2 ^2

7 = 1 ^2 + 1 ^2 + 1 ^2 + 2 ^2

則對於乙個給定的正整數n,可以表示為:n = a ^ 2 + b ^ 2 + c ^ 2 + d ^ 2.

你需要求出字典序最小的一組解a,b,c,d.

輸入格式

程式輸入乙個正整數n(1<=n<=5000000)

輸出格式

輸出4個非負整數a,b,c,d,中間用空分開。

樣例輸入1:

5樣例輸出1:

0 0 1 2

樣例輸入2:

12樣例輸出2:

0 2 2 2

#include

using

namespace std;

intmain()

}}}return0;

}

本題沒有任何演算法上的難度,純列舉即可,但是a,b,c,d都用迴圈表示的話,會超時!所以這裡有乙個技巧就是:最後乙個數,直接用sqrt得出,sqrt的計算雖然需要時間,但是比迴圈需要的時間要短一些。當然,sqrt得到的不一定是整數,沒關係!因為後面用了if做了一次是否相等的判斷。

C 的列舉小技巧

列舉是什麼呢?列舉是乙個值型別,包含一組命名的常量,如以下的 public enum color 這裡是最簡單的定義列舉的方式,沒有設定任何的東西,所以預設情況下,enum的型別是int型的,並且是從0開始往下遞增地,但是我們可以修改以上說的東西,比如以下 public enum color sho...

小ho的01串(列舉)

時間限制 1 sec 記憶體限制 128 mb 提交 187 解決 77 統計有乙個由0和1組成的字串,它好長呀 一望無際 恩,說正題,小ho的數學不太好,雖然是學計算機的但是看見0和1也是很頭疼的,現在他的老師想讓他計算出來包含k個1的子串有多少個 呀,頭要炸了!小ho知道你的數學棒棒噠,所以來找...

小技巧 指數形式的列舉

指數形式的列舉一般使用遞迴來實現。通常,求乙個集合的全組合 也就是全部子集 的時候,常用指數型列舉。原理很簡單,每層遞迴只有兩個分支 選還是不選。然後對於每次到達遞迴出口的時候,對當前的組合判斷一下合不合法即可。對於回溯來講,可以使用各種stl實現 反正都是暴力,不用在意刪除的那點時間複雜度 比如v...