算法训练 素因子去重
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^353,p=2*5=10
我们先来看代码
#include<stdio.h>
int main()
{
long long n;//根据所给范围,知道n的数有可能非常之大,所以要用long long型
scanf("%lld",&n);//要用%lld才能输入一个比较大的数,因为最后一个测试是一个非常大的数,不然只能拿90分
long long i;
long long p=1;
if(n<=2)//以防万一他输入一个非常小的数
p=n;
else
for(i=2;i<=n;i++)
{
if(n%i==0)
{
p*=i;//关键处,多多体会
while(n%i==0)
n=n/i;
}
}
printf("%lld\n",p);
return 0;
}
最后插入广告:欢迎来咨询我微信13189871766,有泰国面霜和洗面奶送,对皮肤非常好。都是做翻译的时候从泰国带回来的