问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
自己吭哧做了半个小时一直想不通怎么弄一个那么大的数组,所以就一直崩,求助同桌后发现,,原来根本就不用开数组!下面是他教我的代码,每次把素因子找到后相乘,再开一个while把这个素因子全部除掉就好了。
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
//int p[5000005];
int main()
{
long long n;
cin>>n;
long long ans=1;
long long flag=n;
// memset(p,0,sizeof(p));
for(int i=2;n!=1;i++)
{
if(n%i==0) ans=ans*i;
while(n%i ==0)
{
n=n/i;
}
}
cout<<ans;
return 0;
}