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

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

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

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

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

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

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

AC代码:

#include <bits/stdc++.h>
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<<b<<endl; //优化2
				return 0;
			}	
		}
	}
  	return 0;
}

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

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小芒果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值