聰明的燕姿 JLOI2014

2022-02-03 12:06:58 字數 1353 閱讀 5522

陰天傍晚車窗外

未來有乙個人在等待

向左向右向前看

愛要拐幾個彎才來

我遇見誰會有怎樣的對白

我等的人他在多遠的未來

我聽見風來自地鐵和人海

我排著隊拿著愛的號碼牌

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

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

輸入包含k組資料(k<=100)

對於每組資料,輸出有兩行,第一行包含乙個整數m,表示有m個等的人,第二行包含相應的m個數,表示所有等的人的號碼牌。注意:你輸出的號碼牌必須按照公升序排列。

42
3

20 26 41

對於100%的資料,有s<=2*10*9

題解

一道顯而易見的數學題,顯而易見地我不會做。因為根本這個正解要用到的約數定理、約數和定理。唯一分解定理我都沒學過,如果知道這些結論的話有沒有推出答案的數學能力也未必。

唯一分解定理:

任何乙個大於1的自然數n,都可以唯一分解成有限個質數的乘積n=p1^a1*p2^a2*…*pn^an,這裡p1

#include#include

#include

#include

#define ll long long

using

namespace

std;

const

int sj=100100

;ll s,m,ps,p[

10000

],res[sj],ge;

bool fp[sj]=;

void

xxs()

for(int j=1;j<=ps&&i*p[j]5;j++)

}}int

pss(ll x)

void dfs(int

l,ll ji,ll yu)

long

long

temp,f;

if((yu-1)>p[l]&&pss(yu-1

))

for(int i=l+1;p[i]*p[i]<=yu;i++)

}}void

cz()

else

printf(

"0\n");

}}int

main()

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

JLOI2014 松鼠的新家

裸的 樹鏈剖分 然而 並不用線段樹 求x,y的lca 後 在 x上標記加一,y上標記加一 lca標記減一,fa lca 標記減一 include int n int shunxv 300005 int to 600005 next 600005 head 600005 cnt void add in...