2017 9 11 聰明的燕姿 失敗總結

2021-08-08 01:34:36 字數 884 閱讀 9920

這題有毒、如假包換的爆搜

只要知道乙個數的約數加起來=分解質因數後每個  質因數1~pi次字首和  相乘的結果 就好 做(sou)了

所以如果知道約數和,就可以列舉質因數來爆搜

必須剪枝到極致才能過,不然會t

由於約數和==一堆數的乘積,所以有乙個剪枝是只有能整除才去搜

由於分解的質因數不能重,所以遞迴剩下部分時不能用上一次用的質因數。(去重優化)

由於有可能出現剩下的大於根n,所以及時判斷 剩下的數-1 是不是質數 (第一遍寫的時候以為剩下的數-1只有乙個、、結果狂wa)

然後就可以過了

碼:#include#include#include#includeusing namespace std;

#define ll long long

int n,su[1000006],tot,n,ans,daan[1000006];

bool he[1000006];

void eular()

for(j=1;j<=tot&&i*su[j]<=n;j++)

}}void dfs(int qi,int o,int ys)

if(ys-1>=su[qi])

if(ss)daan[++ans]=o*(ys-1);

} for (i=qi; su[i]*su[i]<=ys; i++)

for (ll he=1+su[i],lin=su[i]; he<=ys; lin*=(ll)su[i],he+=lin)

if (!(ys%he)) dfs(i+1,o*lin,ys/he);

}int main()

printf("%d\n",ans);

sort(daan+1,daan+1+ans);

for(i=1;i

聰明的燕姿(數論)

題目背景 陰天傍晚車窗外 未來有乙個人在等待 向左向右向前看 愛要拐幾個彎才來 我遇見誰會有怎樣的對白 我等的人他在多遠的未來 我聽見風來自地鐵和人海 我排著隊拿著愛的號碼牌 題目描述 城市中人們總是拿著號碼牌,不停尋找,不斷匹配,可是誰也不知道自己等的那個人是誰。可是燕姿不一樣,燕姿知道自己等的人...

acWing 1296 聰明的燕姿

用到了算數基本定理的思想,尤拉篩的不記錄最小質因子的板子,另外在優化dfs的時候還用到了小學生求素數的一點小思想,下面我們簡單說一下思路和分析幾個問題。思路 正約數之和等於s的數,容易想到直接列舉每乙個質數與每乙個質數的數量,然後進行優化。第乙個問題 尤拉篩存質數的陣列到底開多大?這個問題,誰一開始...

聰明的燕姿 JLOI2014

陰天傍晚車窗外 未來有乙個人在等待 向左向右向前看 愛要拐幾個彎才來 我遇見誰會有怎樣的對白 我等的人他在多遠的未來 我聽見風來自地鐵和人海 我排著隊拿著愛的號碼牌 城市中人們總是拿著號碼牌,不停尋找,不斷匹配,可是誰也不知道自己等的那個人是誰。可是燕姿不一樣,燕姿知道自己等的人是誰,因為燕姿數學學...