蓝桥杯试题集试题汇总(C++)
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5^3,p=2*5=10
分析
具体解题思路参照:蓝桥杯 算法提高 分解质因数https://blog.csdn.net/weixin_43042683/article/details/105895449
注意n的取值访问超过了int的取值范围(21 4748 3647),故n的类型应去long long。
参考代码
#include<bits/stdc++.h>
using namespace std;
bool zhishu(long long n)//质数判断
{
if(n==2)
return true;
if(n%2==0)
return false;
for(int i=3;i<=sqrt(n);i=i+2)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
long long n,p=1;
cin>>n;
if(zhishu(n))
{
cout<<n;
return 0;
}
for (int i=2;i<=n;i++)
{
if(n%i==0)
{
p=p*i;
while(n%i==0)
{
n=n/i;
}
}
if(zhishu(n))
{
p=p*n;
cout<<p;
return 0;
}
}
}