首先我们了解下素数的定义。一个整数的因数只有1和它本身的数称之为素数,又名质数。其中1不是质数。例如6的因数有1,2,3,6,那么6不是素数,3的因数只有1,3那么3是质数。
要解决这个问题的关键是找到n的因数,我们可以用循环遍历来解决。例如3/1=3,3/2=1.5,3/3=1。那么1,3是他的因数,所以3是质数。
代码如下
#include <stdio.h>
int main()
{
int i1, i2, n;
scanf("%d", &n);
int shu = 0;
for (i1 = 2; i1 <= n; i1++)
{
int a = 0;//一定要将这个定义放在循环里,否则一次循环后a的值会改变
for (i2 = 2;i2 < i1;i2++)
{
if (i1 % i2 == 0)
{
a++;
break;//借助a来判断是否有第三个整除结果
}
}
if (a == 0)
{
printf("%d\n", i1);
shu++;
}
}
printf("素数个位为:%d", shu);
return 0;
}
这是最直接的算法,不过我们在仔细想一想,偶数有没有可能是质数。当偶数是2时,显然他只有1,2两个因数是质数,但当偶数大于二时,他是不是一定是2的倍数,即这个偶数一定有因数2,由此我们便可以再将代码优化些。
优化代码
#include <stdio.h>
int main()
{
int i1, i2, n;
scanf("%d", &n);
int shu = 1;
printf("2\n");//为了方便后续代码写,提前将2特例输出
for (i1 = 3; i1 <= n; i1 = 2 + i1)//每次加2,除去了偶数
{
int a = 0;//一定要将这个定义放在循环里,否则一次循环后a的值会改变
for (i2 = 2;i2 < i1;i2++)
{
if (i1 % i2 == 0)
{
a++;
break;
}
}
if (a == 0)
{
printf("%d\n", i1);
shu++;
}
}
printf("素数个位为:%d", shu);
return 0;
}
喜欢的点赞收藏,如有错误欢迎在评论区留言指正。