補檔 JLOI 2017 聰明的燕姿

2022-03-27 11:21:57 字數 1759 閱讀 8657

陰天傍晚車窗外

未來有乙個人在等待

向左向右向前看

愛要拐幾個彎才來

我遇見誰會有怎樣的對白

我等的人他在多遠的未來

我聽見風來自地鐵和人海

我排著隊拿著愛的號碼牌

城市中人們總是拿著號碼牌,不停尋找,不斷匹配,可是誰也不知道自己等的那個人是誰。可是燕姿不一樣,燕姿知道自己等的人是誰,因為燕姿數學學得好!燕姿發現了乙個神奇的演算法:假設自己的號碼牌上寫著數字s,那麼自己等的人手上的號碼牌數字的所有正約數之和必定等於s

所以燕姿總是拿著號碼牌在地鐵和人海找數字(喂!這樣真的靠譜嗎)可是她忙著唱《綠光》,想拜託你寫乙個程式能夠快速地找到所有自己等的人。

(莫名唱了起來= =)

輸入包含k組資料(k<=100)對於每組資料,輸入包含乙個號碼牌s(s<=10^9)

對於每組資料,輸出有兩行,第一行包含乙個整數m,表示有m個等的人,第二行包含相應的m個數,表示所有等的人的號碼牌。

注意:你輸出的號碼牌必須按照公升序排列。423

20 26 41

考試的時候,一看就知道a不了,打了個極其暴力的程式= =

1 inline void find(long

longx)9

if(ret==s)

10 ans++;

11 }

view code

結果顯然= =

正解則是個很神奇的東西

唯一分解定理:任何大於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 #include5

using

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 }

view code

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 然後因為最近剛學過等比數列求和公式我就把這東西往...