藍橋演算法訓練之素因子去重

2021-09-29 09:41:38 字數 954 閱讀 2641

問題描述

給定乙個正整數n,求乙個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1

輸入格式

乙個整數,表示n

輸出格式

輸出一行,包含乙個整數p。

樣例輸入

1000

樣例輸出

10資料規模和約定

n<=10^12

樣例解釋:n=1000=2^353,p=2*5=10

思路分析:

依題可知,要把n分解成幾個數相乘並且是素數,出現的次數最多為1次,如果出現多次,就把多餘的去掉,然後把這些素因子相乘即可得到結果p.我們要注意n是小於等於10^12(大於2的32次方),已經超過了int 型別的範圍,所以要用__int64來定義變數

c語言實現:

#include

intmain()

;//用來放求得的因數

j=0; flag=0;

//初始化為0,表示不能被整除

scanf

("%i64d"

,&n)

;//注意64位的輸入格式為:%i64d

i=2;

while

(i<=

sqrt

(n))

//i是否小於根號n

i++;if

(flag)

}//下面是去重,把相同的留下乙個,其他的設為0

for(i=

0;i1;i++

)//計算p的結果,把不等於0的元素相乘

for(i=

0;i(a[i]!=0

) p=p*a[i]

;printf

("%i64d"

,p);

//注意:列印輸出格式為:%i64d

return0;

}

藍橋杯 演算法訓練 素因子去重

問題描述 給定乙個正整數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。解題思路 1.先求出小於10的6次方的所有素數,因為n至多只存在乙個大於sqrt n 的素因數。2.然後在這些素數中找出n的因數。求素數...