查看原文
其他

【编程练习】判断素数

正念君 嵌入式大杂烩 2021-01-31


题目:判断101到200之间的素数。


【分析】素数是除了1和它本身之外,不能被其他整数整除的数。用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。由此可构建判断素数的函数:

/*********************************************************************************
* Function Name    : isPrime,判断一个数是不是素数
* Parameter       : n:一个int型的数
* Return Value     : TRUE:素数  FALSE:约数或者非大于1的数
* Function Explain :
* Create Date      : 2018.2.25
**********************************************************************************/
BOOL isPrime(int n)
{
 int k, i;
 
 if (n <= 1)  
   return FALSE;  // 传入的数小于等于1则退出函数
 k = (int)sqrt((double)n);
 for (i = 2; i <= k; i++)
 {
   if(n%i == 0)      
   {
     return FALSE;  //约数
   }
 }
 return TRUE;  //素数
}


函数传入的参数n就是需要判断的数,首先这个判断这个数是不是小于1,若其小于1则退出函数,否则函数继续往下执行。变量k用于保存n的算术平方根,然后在2~sqrt(n)的范围内判断,若n能被这范围内的数整除则说明n是约数,否则n为素数。


示例程序:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>  

typedef enum{FALSE=0,TRUE=!FALSE,}BOOL;

BOOL isPrime(int n);

/*********************************************************************************
* Function Name    : main主函数
* Parameter       : NULL
* Return Value     : 0
* Function Explain :
* Create Date      : 2018.11.28
**********************************************************************************/

int main(int argc, char *argv[])
{
 int tmp,i,num=0;
 BOOL prime;
 printf("101到200之间的素数有:\n");

 for (i = 101; i < 200; i++)
 {
   prime = isPrime(i);
   if(prime)
   {
     num++;
     printf("%-3d\t",i);
     if(num%5 == 0) // 每行5个数
     {
       printf("\n");
     }
   }
 }
 printf("\n");
 printf("101到200之间素数的总数有:%d\n",num);
 printf("\n");
 system("pause");  // 使程序暂停,即会显示“请按任意键继续. . .”
}

/*********************************************************************************
* Function Name    : isPrime,判断一个数是不是素数
* Parameter       : n:一个int型的数
* Return Value     : TRUE:素数  FALSE:约数或者非大于1的数
* Function Explain :
* Create Date      : 2018.11.28
**********************************************************************************/

BOOL isPrime(int n)
{
 int k, i;
 
 if(n<=1)  
   return FALSE;
 k = (int)sqrt((double)n);
 for (i = 2; i <= k; i++)
 {
   if(n%i == 0)      //约数
   {
     return FALSE;
   }
 }
 return TRUE;  //素数
}


程序执行结果:


system("pause");这条语句就是使程序暂停,包含到头文件stdlib.h中。


每天进步一点点,关注小编,每天和小编一起打卡学习吧!


往期精彩推荐

智能桌面天气预报系统(终)

分享一个很酷的技巧

【RT-Thread笔记】裸机系统与多线程系统

【编程练习】求正整数的位数,并逆序打印

【C语言笔记】变参函数

关注公众号获取更多资源分享!


后台回复:C101,获取【入门C语言最好的书籍】

后台回复:C000,获取【热门C语言电子书】

后台回复:CV001,获取【郝斌C语言教程视频】

后台回复:CV000,获取【热门C语言视频教程】

后台回复:py100,获取【Python电子书】

后台回复:py001,获取【第一本python入门书】

后台回复:天气预报,获取【天气预报项目源码】

后台回复:py007,获取【机器学习视频教程】

后台回复:py006,获取【Python自动化测试教程】

后台回复:py005,获取【人工智能图像处理视频教程】

后台回复:py004,获取【Python人工智能视频教程】

后台回复:py003,获取【Python入门与进阶视频教程】

后台回复:py002,获取【机器学习经典算法视频教程】



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存