首页 > 后端开发 > C++ > 正文

c语言怎么检验是不是素数

下次还敢
发布: 2024-05-26 03:21:23
原创
457人浏览过
C 语言中检查素数的方法有三种:暴力算法:遍历从 2 到平方根的所有整数,若能整除则非素数。费马小定理:a^(p-1) % p = 1,若恒等则为素数。Miller-Rabin 算法:更有效,但实现较复杂。

c语言怎么检验是不是素数

如何在 C 语言中检查素数

什么是素数?
素数是指除自身和 1 之外,不能被其他正整数整除的自然数。

C 语言中检查素数的方法

1. 暴力算法

立即学习C语言免费学习笔记(深入)”;

  • 遍历从 2 到 待检测数的平方根的所有整数。
  • 如果待检测数能被遍历的整数整除,则它不是素数。
  • 如果待检测数无法被任何遍历的整数整除,则它是一个素数。

代码实现:

Devv
Devv

Devv是一个专为程序员打造的新一代AI搜索引擎

Devv 140
查看详情 Devv
<code class="c">#include <stdio.h>
#include <math.h>

int is_prime(int num) {
    if (num <= 1) return 0;
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) return 0;
    }
    return 1;
}</code>
登录后复制

2. 费马小定理

  • 对于任何素数 p 和任何整数 a,a^(p-1) % p = 1。

代码实现:

<code class="c">#include <stdio.h>

int is_prime(int num) {
    if (num <= 1) return 0;
    for (int i = 2; i < num; i++) {
        if (pow(i, num-1) % num != 1) return 0;
    }
    return 1;
}</code>
登录后复制

3. Miller-Rabin 算法

  • 这是检查素数的一种更有效的算法,但实现起来比较复杂。

代码实现:

<code class="c">#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int is_prime(int num) {
    if (num <= 1) return 0;
    if (num <= 3) return 1;
    if (num % 2 == 0 || num % 3 == 0) return 0;

    int s = 0;
    uint64_t d = num-1;
    while (d % 2 == 0) {
        s++;
        d /= 2;
    }

    for (int i = 0; i < 20; i++) {
        int a = rand() % (num-1) + 1;
        uint64_t x = powmod(a, d, num);
        if (x == 1 || x == num-1) continue;
        int j = 1;
        while (j < s && x != num-1) {
            x = powmod(x, 2, num);
            if (x == 1) return 0;
            j++;
        }
        if (x != num-1) return 0;
    }

    return 1;
}</code>
登录后复制

以上就是c语言怎么检验是不是素数的详细内容,更多请关注php中文网其它相关文章!

相关标签:
C语言速学教程(入门到精通)
C语言速学教程(入门到精通)

C语言怎么学习?C语言怎么入门?C语言在哪学?C语言怎么学才快?不用担心,这里为大家提供了C语言速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号