虚空终端 • 1年前
这题其实只要稍加证明你就知道两个质数的积恒大于两个质数的和
所以要让答案最小,肯定是全部都除碎掉然后加起来
结果分析完就变成了特判质数加分解质因数的题(不愧是数论分类的)
(这边强烈建议背熟求质因数的板子,已经连着几题可以用了)
#include<iostream>
using namespace std;
int main()
{
int t,ans=0;
cin>>t;
int tmp=t,num;
bool flag=1;
for(int i=2;i*i<=t;i++)
if(t%i==0)
{
flag=0;
break;
}
if(flag)
{
cout<<t+1;
return 0;
}
for(int i=2;i<=t;i++)
{
if(t%i==0)
{
flag=1;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
{
num=0;
while(tmp%i==0)
{
num++;
tmp/=i;
}
ans+=i*num;
}
}
if(tmp==1)
break;
}
cout<<ans;
return 0;
}
最后的最后,弱弱的问一句,样例2是不是出错了
上物证:
评论:
请先登录,才能进行评论