演算法訓練 素因子去重

2021-09-18 17:38:51 字數 677 閱讀 6371

給定乙個正整數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 ...