根據題目下面的提示&說明,我們就能知道做這個題的大體思路:先求出來每乙個數的素數因子,然後就開始dp。
求素數因子的方法就是用類似於尤拉篩的操作,倘若乙個數一直都沒有被篩到過,那麼ta就是乙個素數,然後我們就可以用ta來繼續篩其它的數,並且我們只用篩ta的倍數,因為只有ta的倍數才含有這個素因子,被篩到的數一定要及時打上標記 不要問我為什麼那麼我們需要開多大的陣列來記錄素因子呢?其實只用23左右就可以了,因為\(2^=1048576>10^6\),所以開23足夠。
最後就是dp部分了,只要考慮兩種情況,由\(i-1\)或\(i/prime_i\)轉移過來的,答案取個\(min\)就好了,還有本題的輸入有點坑,具體的解決方案就是這樣寫就珂以了:
while(scanf("%d",&n)!=eof)printf("%d\n",f[n]);
最後獻上我醜陋的**
#include#includeusing namespace std;
const int n=1000000,m=1000010;
int n;
int yz[m][23],num[n],f[m];
bool vis[m];
void yych()
}int main()
P2618 數字工程
題目描述 acm 實驗室開啟了乙個數字工程專案,希望把正整數 nn 通過一些特殊方法變成 11。可採用的方法有 1.減去 1 2.除以它的任意乙個素因子。每操作一次消耗乙個單位的能量。請問把 nn 變成 11 最少需要消耗多少能量?輸入格式 本題有多組資料。對於每組測試,一行乙個整數 nn。輸出格式...
luoguP1043數字遊戲
丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...
luogu P2034 選擇數字
題面傳送門 對於這道題,簡單粗暴的dpdp dp是不難想的,dpdp dp方程式為fi max fj 1 s j 1i as f i max f sum ia s fi ma x fj 1 s j 1i as 其中max i k 0 j i 1max i k,0 leq j leq i 1 max ...