【分析】素数是除了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中。 每天进步一点点,关注小编,每天和小编一起打卡学习吧!
|