c语言编程怎么看质数

时间:2025-01-26 21:29:34 网络游戏

在C语言中判断一个数是否为质数,可以采用以下几种方法:

穷举法

从2开始逐个判断该数是否能被2到该数减1之间的数整除。如果存在能整除的数,则该数不是质数;如果不存在能整除的数,则该数是质数。

代码示例:

```c

include

int main() {

int num;

printf("请输入一个正整数: ");

scanf("%d", &num);

for (int i = 2; i < num; i++) {

if (num % i == 0) {

printf("%d不是质数\n", num);

return 0;

}

}

printf("%d是质数\n", num);

return 0;

}

```

优化穷举法

只需判断从2到该数的平方根之间的所有数,因为如果一个数有大于其平方根的因数,那么它必定还有一个小于或等于其平方根的因数。

代码示例:

```c

include

include

int main() {

int num;

printf("请输入一个正整数: ");

scanf("%d", &num);

for (int i = 2; i <= sqrt(num); i++) {

if (num % i == 0) {

printf("%d不是质数\n", num);

return 0;

}

}

printf("%d是质数\n", num);

return 0;

}

```

埃氏筛法

先将2到该数之间的所有数标记为质数,然后从2开始,将每个质数的倍数标记为合数,直到遍历完2到该数的所有数,剩下的未标记的数即为质数。

代码示例(简化版):

```c

include

include

int main() {

int num;

printf("请输入一个正整数: ");

scanf("%d", &num);

bool is_prime[num + 1];

for (int i = 2; i <= num; i++) {

is_prime[i] = true;

}

for (int i = 2; i * i <= num; i++) {

if (is_prime[i]) {

for (int j = i * i; j <= num; j += i) {

is_prime[j] = false;

}

}

}

if (is_prime[num]) {

printf("%d是质数\n", num);

} else {

printf("%d不是质数\n", num);

}

return 0;

}

```

费马检测法

随机选取一个小于该数的整数a,计算a^(该数-1) % 该数的结果,如果结果等于1,则该数可能是质数;如果结果不等于1,则该数一定不是质数。

代码示例:

```c

include

include

include

int main() {

int num;

printf("请输入一个正整数: ");

scanf("%d", &num);

srand(time(NULL));

int a = rand() % (num - 1) + 1;

int result = 1;

for (int i = 0; i < num - 1; i++) {

result = (result * a) % num;

if (result == 1) {

printf("%d可能是质数\n", num);

return 0;

}

}

printf("%d不是质数\n", num);

return 0;

}

```

米勒-拉宾素数测试法

将该数减1写成2^k * m的形式,其中k和m都是整数且m是奇数,随机选取一个小于该数的整数a,计算a^m % 该数的结果,