问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5^3,p=2*5=10
解题思路
可以暴力打一个素数表,然后来除,但是我不是这样的,我是从2开始除,发现一个就一直除,到最后4、6、8等,都不可能是这个数的倍数了。自然就不用考虑那麽多了,虽然n在变小;
特别注意
注意题目的数据范围,一不小心就会超时哦,记得用64位的整型, long long int
AC代码
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
long long int n,p,i;
scanf("%lld",&n);
p=1;
for(i=2;i<=n;i++){
if(n%i==0){/*如果遇到因数*/
p*=i;
}
while(n%i==0){/*因数去重*/
n/=i;
}
}
printf("%d\n",p);
return 0;
}

4262

被折叠的 条评论
为什么被折叠?



