【C】打印100-200之间所有的素数

素数定义在大于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;
}

输出结果


猜你喜欢

转载自blog.csdn.net/sustzc/article/details/79609833