AC

虚空终端  •  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是不是出错了

上物证:


评论:

请先登录,才能进行评论