題目描述
運行 C 程式,輸出 100 至 200 之間的質數,
輸入描述
無
輸出描述
輸出 100 至 200 之間的質數,每行輸出一個質數,每個質數前面需要帶有序號,
輸出樣例

解題思路
在《一文解決如何使用 C 語言判斷質數(素數)》一文中,我詳細講解了質數以及如何使用 C 語言判斷質數,本篇文章將參考此文中判斷質數的函式,共介紹了兩種判斷方法,分別是暴力求解和巧用平方根,出于對程式執行效率的考慮,在這里我以巧用平方根為例進行講解,
方案一
- 首先我們將巧用平方根判斷質數的函式復制到程式中,
- 然后利用
for回圈遍歷 100 至 200 之間的數,逐一判斷哪個是質數, - 找出質數后,將存盤質數個數的變數自加 1,并將此變數和該質數輸出,
具體代碼如下:
#include <stdio.h>
#include <math.h> /* 包含 <math.h> */
/****************************************************************************
* 函式名: Judge_PrimeNumber
* 功能描述:判斷一個數是否為質數
* 輸入引數:
* _number:需要判斷的數
* 回傳值:
* 1:是質數
* 0:不是質數
* 外部引數:無
* 注意事項:無
*
* 作者: 梁國慶
* 日期: 2021-12-11
* 修改記錄:
****************************************************************************/
int Judge_PrimeNumber(int _number)
{
int i = 0;
if (_number < 2)
{
return 0; /* 需要判斷的數小于 2,則不是質數,回傳 0 */
}
for (i = 2; i <= sqrt(_number); i++) /* 遍歷從 2 到 √_number 區間中的所有數 */
{
if (_number % i == 0)
{
return 0; /* 若可以被整除,則不是質數,回傳 0 */
}
}
return 1; /* 若執行完以上程式均未回傳,則是指數,回傳 1 */
}
int main()
{
int i = 0, num = 0;
for (i = 100; i <= 200; i++) /* 遍歷 100 至 200 之間的數 */
{
if (Judge_PrimeNumber(i) == 1) /* 呼叫判斷質數的函式,判斷輸入的整數 i */
{
num++;
printf("%d.\t", num); /* 輸出當前質數的個數 */
printf("%d\n", i); /* 輸出質數 */
}
}
return 0;
}
方案二
本方案是對方案一的優化處理,
在 100 至 200 之間的所有偶數都不是質數,所以可以將其去除,直接對奇數進行判斷,對于方案一來說可以讓程式的運行時間減少一半,運行效率大幅度提高,
具體代碼如下:
#include <stdio.h>
#include <math.h> /* 包含 <math.h> */
/****************************************************************************
* 函式名: Judge_PrimeNumber
* 功能描述:判斷一個數是否為質數
* 輸入引數:
* _number:需要判斷的數
* 回傳值:
* 1:是質數
* 0:不是質數
* 外部引數:無
* 注意事項:無
*
* 作者: 梁國慶
* 日期: 2021-12-11
* 修改記錄:
****************************************************************************/
int Judge_PrimeNumber(int _number)
{
int i = 0;
if (_number < 2)
{
return 0; /* 需要判斷的數小于 2,則不是質數,回傳 0 */
}
for (i = 2; i <= sqrt(_number); i++) /* 遍歷從 2 到 √_number 區間中的所有數 */
{
if (_number % i == 0)
{
return 0; /* 若可以被整除,則不是質數,回傳 0 */
}
}
return 1; /* 若執行完以上程式均未回傳,則是指數,回傳 1 */
}
int main()
{
int i = 0, num = 0;
for (i = 101; i <= 200; i += 2) /* 遍歷 101 至 200 之間的數 */
{
if (Judge_PrimeNumber(i) == 1) /* 呼叫判斷質數的函式,判斷輸入的整數 i */
{
num++;
printf("%d.\t", num); /* 輸出當前質數的個數 */
printf("%d\n", i); /* 輸出質數 */
}
}
return 0;
}
本文作者:main作業室
本文鏈接:https://www.cnblogs.com/main-studio/p/17071484.html
著作權宣告:本文為「main作業室」的原創文章,遵循 CC BY-NC-ND 4.0 著作權協議,著作權歸作者所有,轉載請注明出處!
鼓勵博主:如果您覺得文章對您有所幫助,可以點擊文章右下角【推薦】一下,您的鼓勵就是博主最大的動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542474.html
標籤:其他
