问题描述
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
思路
1,求素因子的方法
2.用数组来存储,下标为质数,值为1则是存在
代码
#include<iostream>
using namespace std;
bool num[4000000]={0};
int main()
{
long long n;
long long ans = 1;
cin>>n;
if(n == 2)
cout<<n<<endl;
else
{
for(int i = 2;i <= n;)
{
if(i == n)
{
num[i] = 1;
break;
}
else if(n % i == 0)
{
num[i] = 1;
n = n/i;
}
else
i++;
}
for(int i = 2;i <= n;i++)
{
if(num[i] == 1)
ans*=i;
}
cout<<ans<<endl;
}
}
心得
1.遇到要去掉重复的时候,可以考虑用数组存储