资源限制
时间限制: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;
}