問題描述
給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1
輸入格式
乙個整數,表示n
輸出格式
輸出一行,包含乙個整數p。
解題思路
1.先求出小於10的6次方的所有素數,因為n至多只存在乙個大於sqrt(n)的素因數。
2.然後在這些素數中找出n的因數。
求素數時,我採用了王道考研系列——計算機考研機試指南上的素數篩選法進行快速篩選。具體思路:初始化:從0~10的6次方都標記為false。篩選過程:如果標記為true則表示為非素數,直接跳過。如果為false,則是素數,進行記錄,並將當前數的倍數都標記為非素數。
源**
#include
int prime[
1000000];
bool mark[
1000001];
int primesize;
//篩選出小於1000000的素數
void
init()
primesize=0;
for(
int i=
2;i<=
1000000
;i++)}
}int
main()
}}if(n!=
0) ans[anssize++
]=n;
int result=1;
for(
int i=
0;i)printf
("%d\n"
,result)
;return0;
}
**詳解
1.if(i>1000)continue; 這句一定要加!!!
因為下一句j=i*i,當i過大時,j會超出int值的範圍,程式會意外終止。
2.n一定要用long long
因為n的上限是10的12次方,超過int的資料範圍。
如果不用long long,則通不過最後乙個測試用例。
3.for(int j=ii;j<=1000000;j+=i)
這裡記錄i所有倍數都為非素數時,並未從2 * i開始標記,而是直接從ii開始標記。因為i * k(k 藍橋杯 演算法訓練 素因子去重
問題描述 給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1 輸入格式 乙個整數,表示n 輸出格式 輸出一行,包含乙個整數p。樣例輸入 樣例輸出 資料規模和約定 n 10 12 樣例解釋 n 1000 2 3 5 3,p 2 5 10 題解 試除法.列舉素因子,...
藍橋杯 演算法訓練 素因子去重
今天做了一道比較簡單的題,但是思路很有意思 其實是被素因子這個概念卡了一會兒 所以就放了上來。資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1 輸入格式 乙個整數,表示n 輸出格式 輸出一行,...
藍橋杯備賽 演算法訓練 素因子去重
問題描述 給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1 輸入格式 乙個整數,表示n 輸出格式 輸出一行,包含乙個整數p。樣例輸入 1000 樣例輸出 10資料規模和約定 n 10 12 樣例解釋 n 1000 2 3 5 3,p 2 5 10 原題目這裡有...