前言
问题1:
问:为什么要给n开根号?(题目57也是有关素数的 不知道当时你们理解了没有)
答:
给n开根号是为了减少判断的次数,从而提高程序的效率。
素数的定义是除了1和自身外没有其他因数的整数。对于一个大于1的整数n,如果存在大于1且小于等于sqrt(n)的因数,那么必定存在一个小于等于sqrt(n)的因数和一个大于sqrt(n)的因数,根据乘法的性质,这两个因数的乘积必然等于n。因此,如果判断n是否是素数,只需要判断从2到sqrt(n)之间的数是否能整除n即可,无需再判断大于sqrt(n)的数。
例如,对于n=100,如果我们从2到100之间的每个数字都判断能否整除n,那么我们需要判断98个数字,但如果我们只判断从2到10之间的数字,也就是sqrt(100)=10,我们只需要判断9个数字,效率明显提高了。
问题2: int main()主函数前面那一堆是干什么用的?
答:为了声明-即模板!来提供后续素数的判断 直接套!
答案如下所示
#include <stdio.h>
#include<math.h>
int prime(int n)
{
int i=2;
int result=1;
if(n==1)//特殊情况判断1单拉出来,如果n是1直接说明他是素数
{
return 0;//结果等于0说明他不是素数
}
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
return 0;//如果是素数就返回零
}
}
return 1;// 循环结束仍然没有整除,说明是素数,返回1
}
//下面就是我们熟悉的判断素数的方法
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int g=m;g<=n;g++)
{
if(prime(g)==1) //套用模板如果prime g结果等于1;
printf("%d ",g);
}
return 0;
}
THE END
- 最新
- 最热
只看作者