问题描述
给定一个正整数n,求一个正整数p,满足p为n的所有素因子的乘积,且每个素因子的出现次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
#include <math.h>
#include <string.h>
#define maxn 10000000
int the[maxn];
int main()
{
using namespace std;
memset(the, 0, sizeof(the));
long long n;
cin >> n;
if (n == 2)
{
cout << n;
return 0;
}
else
for (int i = 2; i < n;)
{
// 原理:所有的质因数都为因数分解而来
// 能整除,为因数
if ((n / i)*i == n)
{
the[i] = 1;
n /= i;
}
else
i++;
}
the[n] = 1;
n = 1;
for (int i = 0; i < maxn; i++)
{
if (the[i] == 1)
n *= i;
}
cout << n;
}