【编程练习】判断素数
题目:判断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中。
每天进步一点点,关注小编,每天和小编一起打卡学习吧!