資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
給定一個正整數n,求一個正整數p,滿足p僅包含n的所有素因子,且每個素因子的次數不大於1
輸入格式
一個整數,表示n
輸出格式
輸出一行,包含一個整數p。
樣例輸入
1000
樣例輸出
10
數據規模和約定
n<=10^12
樣例解釋:n=1000=2^353,p=2*5=10
解題思路:
該題思路清晰,首先找出素因子,先對2取餘數,如果餘數爲0,說明2是素因子,放入數組中,然後不斷循環,重複的2經過判斷不放入,2判斷完畢後,判斷3,5,7…直到平方數,當然還要考慮自身就是質數的情況,如果存在並且無重複放入到數組中,最後把數組中的所有數相乘即爲所求結果。代碼如下:
#include<bits/stdc++.h>
using namespace std;
int index = 0;
int a[100];
bool judge(int num){
for (int i = 0; i < index; i ++){
if(a[i] == num){
return false;
}
}
return true;
}
int main(){
long long n;
cin >> n;
while (n % 2 == 0) {
if(judge(2)){
a[index ++] = 2;
}
n /= 2;
}
for(int i = 3;i <= sqrt(n*1.0);i += 2){
while(n % i == 0){
if(judge(i)){
a[index ++] = i;
}
n /= i;
}
}
if(n > 2){
if(judge(n)){
a[index ++] = n;
}
}
int sum = 1;
for (int i = 0; i < index; i ++){
sum *= a[i];
}
cout << sum;
return 0;
}