C语言用筛选法求n以内(含n,n<=1000)的素数,并逆序输出,每10个一行。 输入:n 输出:逆序输出n以内的素数,每10个一行,用空格隔开,行末无空格。
时间: 2023-05-27 13:02:09 浏览: 137
C/C++利用筛选法算素数的方法示例
思路:用数组标记每个数是否为素数,初始时都设为素数,然后从2开始,依次将2的倍数、3的倍数、……、大于平方根n的数的倍数标记为合数。最后遍历数组输出素数即可。
代码如下:
```c
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, j;
int prime[1001]; // 标记是否为素数
scanf("%d", &n);
// 初始化prime数组,全部设为素数
for (i = 2; i <= n; i++) {
prime[i] = 1;
}
// 筛选合数
for (i = 2; i <= sqrt(n); i++) { // 只需要筛选到sqrt(n)即可
if (prime[i]) { // i是素数,将i的倍数标记为合数
for (j = i * 2; j <= n; j += i) {
prime[j] = 0;
}
}
}
// 倒序输出素数,每10个一行
int count = 0; // 计数器,记录输出的素数个数
for (i = n; i >= 2; i--) {
if (prime[i]) {
printf("%d ", i);
count++;
if (count % 10 == 0) { // 每10个一行
printf("\n");
}
}
}
return 0;
}
```
阅读全文