一道水题但做完才发现自己是憨憨,或许题很简单但思路却完全不一样,代码的长度也截然不同
看过题后是不是发现真的简单,
我的第一次思路就是将其遍历找到素数,判断另外的数满不满足是不是因子同时是素数的条件。
上代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
int zhishu(int n)
{
int i,f=1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
f=0;
break;
}
if(f==1)
{
return 1;
}
else return 0;
}
}
main()
{
long long n,j;
int i,k;
scanf("%lld",&n);
for(i=2;i<=sqrt(n);i++)
{
if(zhishu(i))
{
j=n/i;
if(j*i==n&&zhishu(j))
printf("%d",j);
}
}
return 0;
}
但我不懂哪里出现了问题
下载测试点后发现输入6输出3,但我代码同样是这样。后来受人启发后将题目重读一遍才发现,是我想的太复杂了首先题目说这个数是两个不同质数的乘积,那么我们可以想一想质数是不是只能被其自己和一整除,那么这数能整除的除了一和它本身之外只有两个素数了吗。所以我们只要通过找他的因子输出那个大的就可以不用进行素数判断。
#include<stdio.h>
#include<string.h>
#include<math.h>
main()
{
long long n;
scanf("%lld",&n);
int i,j;
for(i=2;i<=sqrt(n);i++)
{
j=n/i;
if(j*i==n)
printf("%d",j);
}
}
这样是不是变得十分简单了呢。
通过这题我受到的启发不要拘泥于一种想法,要多思考从题目本身下手,了解一下基础他的特点,这样代码不仅变得简单,而且思路也更加简洁,这样才是做题的目的。
加油。
2021/11/16