給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1
乙個整數,表示n
輸出一行,包含乙個整數p。
n<=1012
對n分解質因數,應該找到乙個最小的質數k,然後按下述步驟完成:
1.如果這個質數恰等於n,則說明分解質因數的過程已結束,列印出即可;
2.如果n!=k,但n能被k整除,則列印出k的值,並用n除以k的商,作為新的正整數n,重複執行第一步;
2.如果n不能被k整除,則用k+1作為k的值,重複執行第一步。
將求出的質因子放到乙個陣列中儲存,陣列下標表示該質因子,陣列的值為0或1,為1表示有該質因子,最後讀取該陣列的值,將為1的元素下標相乘。
#include
using namespace std;
bool num[
4000000];
intmain()
while
(k<=n)
else
if(n%k==0)
else k++;}
for(
int i =
2; i <= n;
++i)
if(num[i]
) ans*
=i; cout
}
演算法訓練 素因子去重
題目鏈結 問題描述 給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1 分析 之前寫了需要判斷是素數 雖然通過了 後面發現是不需要判斷的。因為當你每次去掉乙個素因子後,這個因子的倍數就會不存在了。這個和素數篩選差不多,只不過素數篩選是標記,這裡是刪除。因為i從最...
演算法訓練 素因子去重
傳送門 url 題目 問題描述 給定乙個正整數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 輸出格式 輸出一行,包含乙個整數p。樣例輸入 樣例輸出 資料規模和約定 n 10 12 樣例解釋 n 1000 2 3 5 ...