主頁 > 百科知識 > C語言求素數(shù)代碼

C語言求素數(shù)代碼

時間:2024-11-29 19:25:19 瀏覽量:

for(c=2;c<=b;c++) if(a%c==0)break; -- 這是一句。

c從2 起,2,3,4,5。。到b, 依次去除 a,

a%c==0 -- 如果 (除法 求余數(shù))余數(shù)是 0 ,就是 除盡了,它不是素數(shù)

break; --一旦 除盡了 就 break, 也就是 結(jié)束 循環(huán)。這時的 c 循環(huán)到多少就等于多少,不會大于 b.

如果 (除法 求余數(shù))余數(shù)是始終 不是 0, 直到 b 也沒除盡。循環(huán)結(jié)束。

出循環(huán)體時,由于 c++, c 增 1。c 最大值 不超過 b+1.

接下來 if(c>=b+1) 就是判斷上面循環(huán) 狀態(tài),到底 循環(huán)到 幾。

滿足c>=b+1 是 素數(shù), 否則 不是。

顯然 c >= b+1

以下是一個簡單的C語言代碼示例,用于求出10到100之間的所有素數(shù) [?](https://cloud.tencent.com/developer/article/1751025) [?](https://blog.csdn.net/BJYX_L/article/details/132146944#comments_28044711) [?](https://blog.csdn.net/BJYX_L/article/details/132146944) [?](https://blog.csdn.net/weixin_73383175/article/details/128228041)。

```c

#include<stdio.h>

int main()

{

int i, j, count = 0;

for(i = 10; i <= 100; i++)

{

for(j = 2; j <= sqrt(i); j++)

{

if(i % j == 0)

break;

}

if(j > sqrt(i))

{

count++;

printf("%d\t", i);

if(count % 10 == 0)

printf("\n");

}

}

printf("共有%d個素數(shù)\n", count);

return 0;

}

```

這段代碼的主要思路是:

1. 使用外層for循環(huán)遍歷10到100之間的所有整數(shù)。

2. 在內(nèi)層for循環(huán)中,從2開始,到整數(shù)i的平方根結(jié)束。這是因為一個數(shù)的因子最多不會超過它的平方根,如果在這個范圍內(nèi)沒有找到能整除的數(shù),那么這個數(shù)就是素數(shù) [?](https://blog.csdn.net/BJYX_L/article/details/132146944#comments_28044711) [?](https://blog.csdn.net/BJYX_L/article/details/132146944)。

3. 如果在內(nèi)層循環(huán)中找到了一個能整除i的數(shù),那么就跳出內(nèi)層循環(huán)。

4. 如果在外層循環(huán)結(jié)束后,內(nèi)層循環(huán)都沒有跳出,那么說明i是素數(shù),將其加入素數(shù)的計數(shù)中,并打印出來。

5. 每打印出10個素數(shù),就換一行,以便于查看結(jié)果。

這段代碼的優(yōu)化之處在于,在內(nèi)層循環(huán)中,只需要檢查到整數(shù)i的平方根,而不是全部的數(shù),這大大減少了計算量 [?](https://blog.csdn.net/BJYX_L/article/details/132146944#comments_28044711) [?](https://blog.csdn.net/BJYX_L/article/details/132146944)。

以下是一個用C語言求素數(shù)的簡單代碼示例:

#include <stdio.h>

int isPrime(int n) {

if (n <= 1) {

return 0;

}

for (int i = 2; i * i <= n; i++) {

if (n % i == 0) {

return 0;

}

}

return 1;

}

def main() {

double n, i;

cin >> n;

srand(); // 隨機生成一個正整數(shù)種子,保證每次運行程序都是隨機的

i = isPrime(17); // 當輸入為17時,返回1,因為17是素數(shù)

cout << "素數(shù)個數(shù):" << i << endl;

sleep(1); // 暫停一下,控制輸出速度

cin >> n; // 清空輸入緩沖區(qū),重新輸入下一個數(shù)字

sleep(1); // 清空緩存區(qū),控制輸出速度

cout << "素數(shù)個數(shù):" << i << endl;

sleep(1); // 清空緩存區(qū),控制輸出速度

cin >> n; // 清空緩存區(qū),重新輸入下一個數(shù)字

sleep(1); // 清空緩存區(qū),控制輸出速度

cout << "素數(shù)個數(shù):" << i << endl;

sleep(1); // 清空緩存區(qū)

素數(shù)指的是大于 1 的自然數(shù),除了 1 和自身外,沒有其他正因數(shù)的數(shù)。

以下是一段用 C 語言編寫的求素數(shù)的代碼:

#include <stdio.h>

// 判斷一個數(shù)是否為素數(shù)的函數(shù)

int is_prime(int n) {

// 如果數(shù)字小于等于 1,則不是素數(shù)

if (n <= 1) {

return 0;

}

// 從 2 開始循環(huán)到 sqrt(n) + 1

for (int i = 2; i <= sqrt(n) + 1; i++) {

// 如果 n 能被 i 整除,則不是素數(shù)

if (n % i == 0) {

return 0;

}

}

// 如果循環(huán)結(jié)束都沒有被整除,則是素數(shù)

return 1;

}

int main() {

int n;

printf("請輸入一個正整數(shù):");

scanf("%d", &n);

// 調(diào)用 is_prime 函數(shù)判斷輸入的數(shù)是否為素數(shù)

if (is_prime(n)) {

printf("%d 是一個素數(shù)。\n", n);

} else {

printf("%d 不是一個素數(shù)。\n", n);

}

return 0;

}

在這個程序中,我們首先定義了一個名為 is_prime 的函數(shù),用于判斷一個數(shù)是否為素數(shù)。該函數(shù)使用一個循環(huán)來檢查從 2 到該數(shù)平方根加 1 的所有數(shù),如果該數(shù)能被這些數(shù)整除,則它不是素數(shù),函數(shù)返回 0;否則,它是素數(shù),函數(shù)返回 1。

在 main 函數(shù)中,我們首先提示用戶輸入一個正整數(shù),然后調(diào)用 is_prime 函數(shù)來判斷這個數(shù)是否為素數(shù)。根據(jù) is_prime 函數(shù)的返回值,我們輸出相應的結(jié)果。

你可以將代碼復制到 C 語言編譯器中進行編譯和運行,然后根據(jù)提示輸入一個正整數(shù),程序?qū)⑤敵鲈摂?shù)是否為素數(shù)。

© 轉(zhuǎn)乾企業(yè)管理-上海店鋪裝修報建公司 版權(quán)所有 | 黔ICP備2023009682號

免責聲明:本站內(nèi)容僅用于學習參考,信息和圖片素材來源于互聯(lián)網(wǎng),如內(nèi)容侵權(quán)與違規(guī),請聯(lián)系我們進行刪除,我們將在三個工作日內(nèi)處理。聯(lián)系郵箱:303555158#QQ.COM (把#換成@)