陰天傍晚車窗外考試的時候,一看就知道a不了,打了個極其暴力的程式= =未來有乙個人在等待
向左向右向前看
愛要拐幾個彎才來
我遇見誰會有怎樣的對白
我等的人他在多遠的未來
我聽見風來自地鐵和人海
我排著隊拿著愛的號碼牌
城市中人們總是拿著號碼牌,不停尋找,不斷匹配,可是誰也不知道自己等的那個人是誰。可是燕姿不一樣,燕姿知道自己等的人是誰,因為燕姿數學學得好!燕姿發現了乙個神奇的演算法:假設自己的號碼牌上寫著數字s,那麼自己等的人手上的號碼牌數字的所有正約數之和必定等於s
所以燕姿總是拿著號碼牌在地鐵和人海找數字(喂!這樣真的靠譜嗎)可是她忙著唱《綠光》,想拜託你寫乙個程式能夠快速地找到所有自己等的人。
(莫名唱了起來= =)
輸入包含k組資料(k<=100)對於每組資料,輸入包含乙個號碼牌s(s<=10^9)
對於每組資料,輸出有兩行,第一行包含乙個整數m,表示有m個等的人,第二行包含相應的m個數,表示所有等的人的號碼牌。
注意:你輸出的號碼牌必須按照公升序排列。423
20 26 41
1 inline void find(longview codelongx)9
if(ret==s)
10 ans++;
11 }
結果顯然= =
正解則是個很神奇的東西
唯一分解定理:任何大於1的自然數,都可以唯一分解成有限個質數的乘積
即:n=p1^k1×p2^k2...×pa^ka
那麼何不預處理出來一大圈質數,然後dfs出唯一分解式呢
n=p1^k1×p2^k2..×pa^ka
因數和即可表示成(p1+p1^2+...+p1^k1)...
那麼我們就可以dfs了
(我實在不會數學啊qaq)
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6 typedef long
longl;7
l s;
8 l prime[100001],num_prime(0);9
bool flag[100001
];10 inline void
play_table()21}
22}23 l ans[1000001],top(0
);24
int ppp[4]=;
25/*
inline int modular_exp(int a,int m,int n)
36inline bool check(l x)
*/44 inline bool
check(l x)
50 inline void
dfs(l st,l pos,l now)
55if((st-1)>prime[pos]&&check(st-1
))56 ans[++top]=now*(st-1
);57
for(int i=pos+1;prime[i]*prime[i]<=st;i++)65}
66}67int
main()
79 }
ps:本來想打miller-rabin的,然後就gg了qaq
聰明的燕姿 JLOI2014
陰天傍晚車窗外 未來有乙個人在等待 向左向右向前看 愛要拐幾個彎才來 我遇見誰會有怎樣的對白 我等的人他在多遠的未來 我聽見風來自地鐵和人海 我排著隊拿著愛的號碼牌 城市中人們總是拿著號碼牌,不停尋找,不斷匹配,可是誰也不知道自己等的那個人是誰。可是燕姿不一樣,燕姿知道自己等的人是誰,因為燕姿數學學...
題解 P4397 JLOI2014 聰明的燕姿
description 給出s,找出所有約束和為s的數 sample input sample output 3 20 26 41 數論普遍我都沒思路。乙個白天就調了這麼一道題,不如刷刷矩乘愉悅一下。考慮兩個定理 唯一分解定理 沒有鳥用,好像基本都知道 s prod p i 因數和定理 x prod...
洛谷P4397 JLOI2014 聰明的燕姿
傳送門 dfs的時候莫名其妙深度太大過不了 然後死活找不出 錯 首先,約數和這東西是個積性函式,或者直接點的話就是如果 n p 1 p 2 p 3 p m 那麼 n 的約數和就等於 s begin prod m end begin sum j end 然後因為最近剛學過等比數列求和公式我就把這東西往...