思路点拨:
首先,我们得求出哪两个数的乘积为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;
}
我是爱编程的小芒果,喜欢我的文章希望能点个赞,你的支持是我创作最大的动力,我们一起加油鸭!