【C】列印100-200之間所有的素數
阿新 • • 發佈:2019-01-08
素數定義:在大於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; }
輸出結果: