C语言中如何判断质数

 更新时间:2023年03月03日 09:53:44   作者:胖大斯  
这篇文章主要介绍了C语言中的判断质数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

C语言判断质数

写判断质数的程序时,需特别注意边界条件:

1.开始边界条件:2作为第一位质数,不参与循环;

2.循环主体:divisor += divisor % 2 +1代表当除数divisor是奇数时+2,是偶数时+1;

3.结束边界条件:当divisor趋近n时,即divisor=n-1或divisor=n-2,仍然没有数能被n整除,那么可以判断n为质数

#include <stdio.h>
int main() {
    int divisor;
    int n;
    scanf("%d",&n); // 输入要判断的数
    if (n == 2) {
        printf("YES"); 
    } else {
        for (divisor = 2; divisor < n; divisor += (divisor % 2 + 1) ) {
            if (n % divisor == 0) {
                printf("NO"); // 当出现能被1或自身之外整除时
                break;
            } else if (divisor == n - 1 || divisor == n-2) {
                printf("YES"); // 循环到 n-1 或 n-2 时,仍然没有被其他数整除
            }
        }
    }
    return 0;
}

C语言判断素数的函数

下列程序写了一个判别素数的函数,在主函数输入一个整数,输出是否为素数的信息。

#include <stdio.h> 
int main()
   {
      int prime(int);
      int n;
      printf("请输入一个整数:");
      scanf("%d",&n);    
     if______________________                 
         printf("%d 是素数。\n",n);
     else
         printf("%d 不是素数。\n",n);
     return 0;
   }
  int prime(int n)
  {
     int flag=1,i;
     for(i=2;i<n/2&&flag==1;i++)
     if ______________________                   
     flag=0;
     ________________________;
    }

经分析,以上代码使用flag的值来判断输入的n是否为素数,flag=1,n为素数;flag=0,n不是素数。完善if条件语句,第一个if, 主函数中的if调用函数,需要填入一个参数,即prime(n); 第二个if,是判断什么情况下flag=0,即输入的整数不为素数,即(n/i==0),余数为0,可以整除;最后返回flag的值,return flag。

但是经过运行可以知道,n=4的时候,程序判断4是素数,明显是错误的,n取0和1的时候同理,程序存在漏洞。

分析得知,在定义函数的过程中,for循环条件语句,i<=n/2&&flag==1才能正确运行,同时添加if语句对0和1判断。(前提输入的n>=0,如果为负整数,另加判断条件,略)

正确代码如下

#include <stdio.h> 
int main()
   {
    int prime(int);//函数声明
    int n;
    printf("请输入一个整数:\n");
    scanf("%d",&n);	
    if(prime(n))
	{    
        printf("%d 是素数。\n",n);
    }else
    {
        printf("%d 不是素数。\n",n);
    }
    return 0;
   }
int prime(int n)  //函数定义
{
    int flag = 1,i;
    if (n <= 1)  //判断0和1,需要先排除
       flag = 0; //返回0值
    for(i=2;i <= n/2 && flag == 1;i++) //n无法整除比n/2大的数,flag=1为真,即为素数,继续执行
        if (n%i == 0)                 //如果取余为0,则其可以整除,不是素数。
        flag=0;                     //标记flag=0,非素数。
    return flag;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++教程之array数组使用示例详解

    C++教程之array数组使用示例详解

    这篇文章主要为大家介绍了C++教程之array数组使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • C++实现推箱子功能附加回撤示例

    C++实现推箱子功能附加回撤示例

    本文主要介绍了C++实现推箱子功能附加回撤示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C++ MD5的源码实例详解

    C++ MD5的源码实例详解

    这篇文章主要介绍了C++ MD5的源码实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • C++ 虚函数表图文解析

    C++ 虚函数表图文解析

    最近学了设计模式中的简单工厂模式,对多态有了具体的认识。于是补了补多态、虚函数、虚函数表相关的知识,本文介绍了C++ 虚函数表,感兴趣的了解一下
    2021-05-05
  • Pthread 并发编程线程自底向上深入解析

    Pthread 并发编程线程自底向上深入解析

    这篇文章主要为大家介绍了Pthread 并发编程线程自底向上深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 详解C++模拟实现priority_queue(仿函数)

    详解C++模拟实现priority_queue(仿函数)

    本文主要介绍了关于C++中优先级队列的模拟实现,以及仿函数的使用,优先级队列是一种容器适配器,其第一个元素总是最大的,仿函数本质是一个类,重载了operator(),可改变比较逻辑,同时,文中还介绍了如何进行类的比较,如日期类或其指针的比较,以及库中sort函数的使用方法
    2024-10-10
  • cmake跨平台构建工具的学习笔记

    cmake跨平台构建工具的学习笔记

    CMake是一个跨平台的安装/编译工具,通过CMake我们可以通过简单的语句来描述所有平台的安装/编译过程,下面这篇文章主要给大家介绍了关于cmake跨平台构建工具的相关资料,需要的朋友可以参考下
    2023-02-02
  • C指针原理教程之C快速入门

    C指针原理教程之C快速入门

    C语言作为大学编程或者计算机专业的一门必修课,把很多初学编程的小伙伴都难住了,感觉无从下手,今天呢,我们来简单介绍下,如何快速入门C语言
    2019-02-02
  • 如何使用VC库函数中的快速排序函数

    如何使用VC库函数中的快速排序函数

    下面呢,小编就为大家介绍一下VC中库函数qsort()的用法。需要的朋友可以过来参考下
    2013-09-09
  • C语言简明讲解三目运算符和逗号表达式的使用

    C语言简明讲解三目运算符和逗号表达式的使用

    三目运算符,又称条件运算符,它是唯一有3个操作数的运算符,有时又称为三元运算符。三目运算符的结合性是右结合的;逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值
    2022-04-04

最新评论