素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数。
解题思路:假设该数字是 i,首先不考虑偶数(可以被 2 整除)的情况,其次用 i 对 3-sqrt(i) (ps:这里从3开始是不考虑偶数)之间的数字逐项取余,若所得结果中包含 0,那么就表示该数字不是素数,反之则是素数。(ps:sqrt(i) 表示对数字 i 求平方根)
为什么要对i开平方?
假设i是一个合数,那么i可以拆分为a*b(假设a >= b),即就是i = a * b,这时a*b >= b*b,也就是i >= b*b,此时√i >= b,也就是说,判断一个数是否为素数时,最终只需要取到它的平方根即可。
源代码:
/* * Copyright (c) 2018, code farmer from sust * All rights reserved. * * 文件名称:IsPrime.c * 功能:打印100-200之间的所有素数 * * 当前版本:V1.0 * 作者:sustzc * 完成日期:2018年3月19日12:37:11 */ # include <stdio.h> # include <math.h> # include <stdlib.h> # define TRUE 1 # define FALSE 0 /* * 函数名称:IsPrime * * 函数功能:判断一个数字是否为素数 * * 入口参数:value * * 出口参数:TRUE or FLASE * * 返回类型:int */ int IsPrime(int value) { int i = 0; int square_root = (int)(sqrt(value)); for (i=3; i<=square_root; i++) { if (0 == value%i) { break; } else { ; } } //当 0 == value%i 条件不满足时,i 的值会一直累加, //直到i的值不满足 i<=square_root 时,for()循环结束, //此时i的值大于 square_root 的值,即就是 //没有找到一个数字被 value 整除 if (i > square_root) { return TRUE; } else { return FALSE; } } /* * 函数名称:OutputPrime * * 函数功能:输出素数 * * 入口参数:无 * * 出口参数:无 * * 返回类型:void */ void OutputPrime(void) { int num = 0; for (num=101; num<201; num+=2) { if (IsPrime(num)) { printf("%d ", num); } else { ; } } return; } int main(void) { printf("100-200之间的素数如下:\n"); OutputPrime(); printf("\n"); system("pause"); return 0; }
输出结果: