1. 程式人生 > >【C】列印100-200之間所有的素數

【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;
}

輸出結果