题目链接:(http://lx.lanqiao.cn/problem.page?gpid=T513)
素因子去重题目描述:
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^353,p=2*5=10
Solution:
1.求出n的素因数
2.将这些素因数中重复的去掉,然后相乘,所得即为结果
(因数据规模为10^12,故数据类型为long long)
#include<iostream>
using namespace std;
int main()
{
int long long n,p=1;
int i;
scanf("%lld",&n);
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)
n/=i;
p*=i;
}
}
if(n>1)
p*=n;
cout<<p;
}
虽然这道题是算法训练里的,但是看到题目就直接想到了这种比较暴力直接的办法。在CSDN里也看了大佬们的解法,不过感觉有点麻烦,毕竟比赛时候时间很紧张,可能我这种解法比较适合比赛用吧……