【洛谷千题详解】P1075 [NOIP2012 普及组] 质因数分解

【洛谷千题详解】P1075 [NOIP2012 普及组] 质因数分解_第1张图片

思路点拨:
首先,我们得求出哪两个数的乘积为n,再依次判断两个数是否为质数,如果是则比较大小,输出大的一个。

但是有没有可以优化的地方呢?肯定有。就比如我们在找哪两个数的乘积为n时,大部分人的想法会一个for循环从1循环到n,然后第一个数=i,第二个数=n/i,看看有没有余数。

优化1:其实只要循环到根号n即可。为什么呢?你可试试8这个数字,如果按照第一种方法,就会得出四组答案:1x8,2x4,4x2,8x1,通过观察我们可以发现,其实前两组和后两组是一样的,只是交换了一下顺序。 所以这里是个小优化。

优化2:正因为这个小优化,保证了第一个数<第二个数,不用比大小了。

优化3:而在判断是否是质数时,也可以用根号,因为因数是成对出现的。

理清了思路,代码不就简简单单了吗?

AC代码:

#include 
using namespace std;
bool isprime(int x) //判断质数函数
{
	if(x<=1) return 0; 
	for(int j=2;j<=sqrt(x);j++) //优化3
	{
		if(x%j==0) return 0;
	}
	return 1;
}
int main()
{
    long long n;
    cin>>n;
    for(int i=2;i<=sqrt(n);i++) //优化1
    {
    	if(n%i==0)
    	{
    		int a=i,b=n/i;
			if(isprime(a)&&isprime(b))
			{
				cout<

我是爱编程的小芒果,喜欢我的文章希望能点个赞,你的支持是我创作最大的动力,我们一起加油鸭!

【洛谷千题详解】P1075 [NOIP2012 普及组] 质因数分解_第2张图片

你可能感兴趣的:(【洛谷千题详解】,算法)