分享

【编程练习】判断素数

 嵌入式大杂烩 2021-08-20

题目:判断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中。

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多