c语言不使用除和求余找出素数
时间: 2023-08-08 22:07:34 浏览: 84
可以使用“筛法”来找出素数,这种方法又称为“埃氏筛法”,其基本思想是:先将2~n的各个数放入表中,然后在表中从2开始,将每个素数的倍数都标记成合数(非素数),以达到筛选素数的目的。
下面是具体的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 10000
int main()
{
int prime[MAXN], vis[MAXN] = {0}; // vis数组用于标记是否是合数
int cnt = 0;
for (int i = 2; i < MAXN; i++) {
if (!vis[i]) { // i是素数
prime[cnt++] = i;
for (int j = i + i; j < MAXN; j += i) {
vis[j] = 1; // 将i的倍数标记成合数
}
}
}
// 输出前20个素数
for (int i = 0; i < 20; i++) {
printf("%d ", prime[i]);
}
printf("\n");
return 0;
}
```
这段代码中,我们使用了一个vis数组来标记每个数是否是合数。在第一个循环中,我们从2开始遍历到MAXN-1,如果当前的数i没有被标记为合数,则将其加入素数列表prime中,并将i的倍数标记为合数。最后,我们输出前20个素数即可。
需要注意的是,当MAXN非常大时,这种方法的效率会比较低,因为要遍历大量的数,同时需要占用大量的内存来存储vis数组。此时,可以考虑使用其他更高效的算法来判断素数。
阅读全文