您的位置:首页 > 编程语言 > C语言/C++

(C语言) 用数组的方法判断素数

2020-04-05 18:21 1991 查看

Description
打印100以内的素数

Method Ⅰ
素数是在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,所以从x=2开始把x的所有小于100的倍数挨个排除掉

int main() {

const int maxnum = 100;
int isPrime[maxnum];
int i, x;
for (i = 0; i < maxnum; i++) {
isPrime[i] = 1;//把数组所有元素初始为1
}
//元素的下标代表判断的数字,值为1表示素数,值为0不是
for (x = 2; x < maxnum; x++) {
if (isPrime[x]) {
for (i = 2; i * x < maxnum; i++) {
isPrime[i * x] = 0; //从2开始,把每个数的倍数都挨个排除掉
}
}
}
for (i = 2; i < maxnum; i++) {
printf("%d\t", i);
}
return 0;
}

Method Ⅱ
isPrime() 的作用是判断整数 i 能不能被比他小的素数整除,如果能被其中一个整除就不是素数。根据这个方法非素数被从小到大依次排除,因此不用判断 i 能否被比它小的非素数整除

int isPrime(int x, int knownPrimes[], int count) {
int ret = 1;
int i;
for (i = 0; i < count; i++) {
if (x % knownPrimes[i] == 0) {
ret = 0;
break;
}
}
return ret;
}

int main() {
const int number = 100;
int knownPrimes[number] = { 2 };
int count = 1;//Number of known primes
int i = 3;
while (i<number)
{
if (isPrime(i, knownPrimes, count)) {
knownPrimes[count++] = i;
}
i++;
}
for (i = 0; i < number; i++) {
printf("%d ", knownPrimes[i]);
}
return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
-avocado- 发布了15 篇原创文章 · 获赞 0 · 访问量 453 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: