蓝桥杯 素因子去重
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3* 5* 3,p=2*5=10
#include<stdio.h>
int main()
{
int flag;
long long n,p,i;
p=1;
scanf("%lld",&n);
for(i=2;i<=n;i++)
{
if(n%i==0 && IsPrimeNumber(i))
{
p*=i;
while(n%i==0){
n/=i;
} // 素因子去重
}
}
p*=n;
printf("%d",p);
return 0;
}
// 判断是否为质数
int IsPrimeNumber(long n)
{
int i,flag;
flag=0;
for(i=2;i<n/2;i++)
{
if(n%i==0)
{
return flag;
}
}
return flag=1;
}