服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言中判断素数(求素数)的思路与方法实例

C语言中判断素数(求素数)的思路与方法实例

2022-10-17 12:07乌龟盖瑞 C/C++

计算机或者相关专业基本上大一新生开始学编程都会接触的一个问题就是判断质数,下面这篇文章主要给大家介绍了关于C语言中判断素数(求素数)的思路与方法,需要的朋友可以参考下

前言

素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。

思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

思路2):判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果 m 不能被 2 ~  间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。

思路1实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int main() {
    int n;
    printf("请输入一个1-100之间的整数:\n");
    scanf("%d", &n);
 
    int m = 0;
    for (int i = 2; i < n; i++ ) {
        if(n % i  == 0) {
            m++;
        }
    }
    if (m == 0) {
        printf("%d是素数\n", n);
    } else {
        printf("%d不是素数\n", n);
    }
    return 0;
}

思路2实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>
int main() {
    int n;
    printf("请输入一个1-100之间的整数:\n");
    scanf("%d", &n);
 
    int i = 0;
    int q = sqrt(n);
    for (i = 2; i <= q; i++ ) {
        if(n % i  == 0) {
            break;
        }
    }
    if (i > q) {
        printf("%d是素数\n", n);
    } else {
        printf("%d不是素数\n", n);
    }
 
    return 0;
}

《C与指针》4.14 - 2:

打印1~100之间所有质数:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main() {
    int num, divisor;
    printf("1, 2");
    for (num = 3; num <= 100; num += 2) {
        for(divisor = 3; divisor < num; divisor +=2 ) {
            if (num % divisor == 0) {
                break;
            }
        }
 
        if(divisor >= num) {
            printf(", %d", num);
        }
    }
    printf("\n");
    return 0;
}

结果:

1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

补充:判断素数的4种方法实例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<stdio.h>
#include<math.h>
//方法一:从1-n挨个判断;
 bool isPrimel_1(int n)
{   for(int i=2;i<n;i++)
    if(n%i==0)
    return false;
    return true;
}
 
//方法二: 将被判断数n,进行开方作为判断结束的条件,
//因为开方后的数,是n的最大因子,最大因子之后的数对判断该数是否是素数没有意义。
 
bool isPrimel_2(int n) 
{   for(int i=2;i<sqrt(n);i++)
    if(n%i==0)
    return false;
    return true;
}
 
//方法三: 只需要判断到该数的一半即可,如果超过它本身的一半,
//进行求余的结果将永远不会为0,除非是该数对该数的求余。
 
bool isPrimel_3(int n) 
{   int i;
    if(n%2==0)
    return 0;
    for(i=3;i=n/2;i+=2){
     if(n%i==0)
     return 0;
     return 1;
}
}
 
 //方法四:从3-n,只判断奇数,先对一个数进行奇偶判断,若是奇数,
 //只对从3到它本身的奇数进行求余计算,同理若是偶数,一定不是素数。
 
bool isPrimel_4(int n)
{   int i,j=1;
    if(n%2==0)
    return 0;
    else{
    for(i=3;i<=n;i=i+2){
     if(n%i==0)
     j=i;
     break;
    }
}
   if(j==n)
   return 0;
   return 1;
}
 
int  main()
{
    int n;
    printf("请输入一个数:");
    scanf("%d",&n);
    printf("%d,%d,%d,%d\n",isPrimel_1(n),isPrimel_2(n),isPrimel_3(n),isPrimel_4(n));
    return 0;
}

总结

到此这篇关于C语言中判断素数(求素数)的文章就介绍到这了,更多相关C语言判断素数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

延伸 · 阅读

精彩推荐
  • C/C++C++基于栈的深搜算法实现马踏棋盘

    C++基于栈的深搜算法实现马踏棋盘

    这篇文章主要为大家详细介绍了C++基于栈的深搜算法实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    coder_vivid4832022-09-22
  • C/C++一文秒懂C语言/C++内存管理(推荐)

    一文秒懂C语言/C++内存管理(推荐)

    在C++中,内存分为:栈、堆、自由存储区、全局/静态存储区、常量存储区。这篇文章主要介绍了一文秒懂C语言/C++内存管理,需要的朋友可以参考下...

    C语言与CPP编程9782021-09-30
  • C/C++C++实现LeetCode(80.有序数组中去除重复项之二)

    C++实现LeetCode(80.有序数组中去除重复项之二)

    这篇文章主要介绍了C++实现LeetCode(80.有序数组中去除重复项之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可...

    Grandyang6952021-11-30
  • C/C++C语言单链表实现学生管理系统

    C语言单链表实现学生管理系统

    这篇文章主要为大家详细介绍了C语言单链表实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    weixin_4485925011032021-10-14
  • C/C++C语言 strcpy和memcpy区别详细介绍

    C语言 strcpy和memcpy区别详细介绍

    这篇文章主要介绍了C语言 strcpy和memcpy区别详细介绍的相关资料,需要的朋友可以参考下...

    C语言教程网6102021-04-27
  • C/C++QT使用canon sdk拍照并保存到本机的方法示例

    QT使用canon sdk拍照并保存到本机的方法示例

    这篇文章主要介绍了QT使用canon sdk拍照并保存到本机的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    云胡4372021-09-29
  • C/C++Linux系统下C语言gets函数出现警告问题的解决方法

    Linux系统下C语言gets函数出现警告问题的解决方法

    这篇文章主要给大家介绍了关于在Linux系统下C语言gets函数出现警告问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的...

    Linuxidc7192021-07-12
  • C/C++C语言实现万年历小功能

    C语言实现万年历小功能

    这篇文章主要为大家详细介绍了C语言实现万年历小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    导航者-追梦4912021-08-25