【牛客网习题】筛选法求素数
程序员文章站
2022-03-15 15:22:20
20(输入)2 3 5 7 11 13 17 19(输出)11(输出)问题分析首先是要求输入整数并判断2-N内的符合他规则的素数输出然后将其他的置0,然后计算0的个数。这里我们先要做的就是将其初始化。for(i=2;i<=n;i++) { a[i]=i; }然后对其进行判断素数的概念之前提到过。素数:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合.....
20(输入)
2 3 5 7 11 13 17 19(输出)
11(输出)
问题分析
首先是要求输入整数并判断2-N内的符合他规则的素数输出然后将其他的置0,然后计算0的个数。这里我们先要做的就是将其初始化。
for(i=2;i<=n;i++)
{
a[i]=i;
}
然后对其进行判断素数的概念之前提到过。
素数:
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
先将数组跑一边跑的跑的过程中引入一个j变量每一遍跑的时候和j进行取模(%)如果模为0那么就将其值变为0也就是说它不是一个素数。依次循环n-2次找出所有不是素数的数字归0.
if(j%i==0)
{
a[j]=0;
}
然后要计算0的个数就要引入一个变量来记录这里我用了count。每一次等于0就会++一次最后将其输出即可。
运行结果展示
代码实现
#include<stdio.h>
#define N 100
int main()
{
int n;
int a[N];
int i, j;
int count = 0;
while (scanf("%d", &n) != EOF)
{
for (i = 2; i <= n; i++)
{
a[i] = i;
}
for (i = 2; i <= n; i++)
{
for (j = i + 1; j <= n; j++)
{
if (j%i == 0)
{
a[j] = 0;
}
}
}
for (i = 2; i <= n; i++)
{
if (a[i] != 0)
{
printf("%d ", a[i]);
}
else
count++;
}
printf("\n%d\n", count);
}
return 0;
}
本文地址:https://blog.csdn.net/weixin_43762735/article/details/109616259