1.分解質因數
求正整數n的質因數的個數,相同的質因數需要重複計算。如 120=2*2*2*3*5。對於每組資料,輸出n的質因數個數。
樣例輸入:120 樣例輸出 5 (1不是n的質因數,若n為質數,則n是n的質因數)
思路:利用素數篩法預先篩選出所有可能成為給定資料範圍內成為素因數的素數。依次遍歷所有小於n的素數,判斷其是否是n的因數。若是,則通過試除確定對應的冪指數。最後求出各個冪指數的和即為所求。
1.輸入n
2.依次測試步驟1中得到的素數能否整除n,若能則表明該素數為他的乙個素因數。
3.不斷將n除以該素數,直到不能再被整除為止。同時統計其冪指數。
4.若完成某個素數的冪指數統計後,n變為1,則表明n的所有素因數全部被分解出來,分解停止。
5.若遍歷、測試、分解完所有預處理的素數,n仍沒被除成1,則表明n存在乙個大於100000的因子,則該因子必為其素因子,冪指數為1。
#includebool mark[100001];
int prime[100001];
int primesize;
void init()//素篩法
}} int main()
}//篩選出0到1000範圍內的所有素數
int cnt[1010];//cnt[i]用來表示,prime[i]所儲存的素數在n!中的因子數,即prime[i]的冪指數
int cnt2[1010];//cnt2[i] 來表示,prime[i]所儲存的素數在a中的因子數
int main()
//依次計算t/prime[i]^k,累加其值,直到t/prime[i]^k變為0
} int ans=123123123;
for(int i=0;i//計算a中素因數prime[i]對應的冪指數
if(cnt2[i]==0) continue;
if(cnt[i]/cnt2[i]ans=cnt[i]/cnt2[i];//統計最小值
} printf("%d\n",ans);
} return 0;
}
c 演算法之分解質因數
這是自己發的第一篇文章,雖然自己註冊有一段時間了,總說著要寫一下筆記,但自己比較懶,或覺得麻煩,反正給自己找了各種理由,看見同學去參加比賽,自己有點不甘心,也想給自己一點成就感,也讓自己及時總結知識積累經驗。好了廢話少說,進入今天的正題 分解質因數。怎樣分解乙個質因數這個我們在小學就學過了,這裡就細...
資料結構複習之分塊
分塊大暴力!分塊大暴力!分塊是乙個具有很強普適性的資料結構。可以適用於許多區間操作,只是效率略低了一點。分塊大體的套路如下 預處理出整塊的貢獻,暴力搞邊界兩個非完整塊的貢獻。分塊由鬼畜證明每個塊的大小為sqrt n 的話複雜度比較好。一下為分塊板子 解釋一下幾個陣列的意思 block是每個塊的大小,...
《大話資料結構》之分段查詢
我所謂的分段查詢包括 二分查詢 插值查詢 fibonacci查詢。三者都是不斷的縮小查詢範圍的查詢方法,只是在每次縮小多少範圍上有所區別。二分查詢 最簡單,每次一刀切,切一半,相對於其他兩種方法顯得很籠統,但是適配性不錯,沒有特殊限制。int binary search int a,int n,in...