C語言編程求解:1到1000之間所有的素數

2021-02-14 C語言修仙


先給出素數的定義:

算法思考:

判斷一個數是不是素數,只需要判斷它是不能只能被1和自身整除。

那怎麼判斷一個數不能被除1和自身之外的其他數整除呢?想法是寫一個循環,循環裡依次除以從2到這個數減1的所有的整數,如果都不能整除,說明這個數是素數;如果出現一個能整除的數,那麼這個數不是素數。

(其實,判斷素數還可以優化,循環裡依次除以從2到這個數平方根的所有的整數就可以了。因為假設一個數n,除以2~根號n的整數,都不能整除,那麼除以根號n~n-1的整數也不能整數。在文章最後再貼上優化的代碼。)

那怎麼判斷能不能整除呢?我麼知道C語言有求餘數的運算符%,如果餘數是0,那麼說明能整除了。

我們來寫程序代碼。這裡,說明一下,當你寫一個具有某個功能的代碼的時候,把這個功能寫成一個函數,而不是所有的代碼都放在main函數裡。在main函數裡調用這個你寫的函數。

給函數命名,如果你知道或者查到了素數的英文單詞是prime number,那麼函數可以起名為 is_primer_number(如果你不知道素數的英文單詞,那麼隨便起個名字也可以,比如叫fun)。因為要傳遞一個代判斷的整數,所以有一個int類型參數。返回值我們用bool型(代碼裡要包含頭文件stdbool.h),如果是素數返回true,如果不是素數返回false。

代碼:

bool is_prime_number(int a)

{

    for (int i = 2; i < a ; i++){

        if (a % i == 0)

            return false;

    }



    return true;

}

判斷是不是素數的函數寫好了。題目是要求1到1000之間所有的函數。你可以再寫一個函數,函數的功能是求1到某個整數之間的所有素數並列印。函數命名為print_prime_num。有一個int類型參數。返回值我們寫為整型,返回素數的個數。

循環把2到這個數之間的每個整數,作為參數,傳給上面寫的函數is_prime_number(),如果是素數,就列印。

int print_prime_number(int a)

{

    int count = 0;



    for (int i = 2; i<=a; i++ ){

        if(is_prime_number(a)){

            count++;

            printf("%d\n", a);

        }

    }

}

main函數的寫法。輸入一個整數,作為參數,傳給函數print_prime_number()處理:

int main ()

{

    int a;

    printf("求1到一個整數之間所有的素數.\n");

    printf("請輸入一個整數: \n");

    scanf("%d", &a);

    print_prime_number(a);

    return 0;

}

運行結果:

 

優化

判斷素數的函數還可以優化,循環裡依次除以從2到這個數平方根的所有的整數就可以了。因為假設一個數n,除以2~根號n的整數,都不能整除,那麼除以根號n~n-1的整數也不能整數。所以我們只要循環2~根號n之間的數就可以了。

函數is_prime_number()可以寫為下面這樣。這裡用到了求平方根的函數sqrt(),要包含頭文件math.h。另外,函數sqrt()的返回類型是double,但是這裡我們要的是整數,所以加上(int)強制轉換為整型。

bool is_prime_number(int a)

{

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

        if (a % i == 0)

            return false;

    }

    return true;

}

運行結果:

點擊這裡留言和查看留言哦!

在看和收藏也是對作者的鼓勵哦!

相關焦點

  • LabVIEW編程實例:如何求解1000以內的所有素數
    素數有無窮多個,那麼在LabVIEW中如何編程實現求解1000以內的所有素數呢?編程思路求解1000以內的所有素數,這個問題可以分解為下面兩個問題:如何判斷一個數是否為素數查找1000以內的所有符合條件的素數對於第一個問題,基本的判斷思路比較簡單
  • C語言編程:驗證哥德巴赫猜想
    a = b + c(其中a是大於等於6的整數,b和c是素數)這個問題就等價於:對於一個給定的大於等於4的偶數a,怎麼找到素數b和c呢?可以用循環的方法,把b的值從3循環到a-3,那麼對應的c的值就是a-3到3。然後我們分別對每一組的b和c值進行是否是素數的判斷。
  • C語言 | 判斷是否素數
    在編程方面有著天賦異稟的人畢竟是少數,我們大多數人想要從C語言小白進階到高手,需要經歷的是日積月累的學習。那麼如何學習呢?當然是每天都練習一道C語言題目!!作者閆小林白天搬磚,晚上做夢。我有故事,你有酒麼?例16:C語言實現輸入一個大於3的整數n,判斷他是否為素數(質數)。
  • Python求解1到100之間的質數
    質數,又叫素數,是指一個大於1的自然數,且除了1和它本身外,不能被其他自然數整除的數。換句話說,就是該數除了1和它本身以外,不再有其他的因數。1既不是質數又不是合數。求1到100之間的質數C語言求解如下:#include <stdio.h>#include <stdlib.h>int main(void){int i,j,count;
  • 你所不知道的C語言經典九大編程實例思想
    獲取更多精彩文章請關注云主宰蒼穹引言:對於學習計算機程式語言而言,一門程式語言的經典思想是十分重要的。這是一門計算機程式語言的特色優點,是其解決問題的經典思維。你所了解的C語言,有哪些經典的編程實例思想,歡迎下方留言交流!
  • C語言 | 求100~200的素數​
    在編程方面有著天賦異稟的人畢竟是少數,我們大多數人想要從C語言小白進階到高手,需要經歷的是日積月累的學習。那麼如何學習呢?當然是每天都練習一道C語言題目!!作者閆小林白天搬磚,晚上做夢。我有故事,你有酒麼?例17:C語言編程實現輸出100~200之間的素數。
  • C語言求給定範圍內的所有素數代碼及解析
    問題描述求給定範圍start〜end之間的所有素數。
  • C語言從入門到放棄(5)
    如下列的一些表示方式:       for(i=1,sum=0;i<=100;i++)for(i=0,j=100,k=0;i<=j;i++,j--)for(i=0;(c=getchar())!=』\n』;i+=c)從上面幾種表達方式可以看出,C語言中的for語句功能強大。
  • 以實例跟我學C語言:如何求解一元二次方程的根
    注意:這是一篇關於C語言編程的基礎語法內容,C語言大神請繞過。例子說明對於如下的一元二次方程:設計C語言程序,輸入一元二次方程的三個係數a、b、c,求解出該方程的兩個根,並且允許用戶在程序中多次輸入不同的係數,以求解不同的一元二次方程的解。
  • 我一 jiao 踹開了 C 語言的大門
    既然學校老師的課聽不懂,那不妨聽聽網上的課,比如我之間推薦的浙大翁愷教授的 C 語言課程,在 B 站上可以找得到。現在還有,不知道以後還會不會下架,因為涉及到一些版權的問題。侯捷老師的 C++ 視頻課都已經全部下架了,所以早點去白嫖,千萬別後悔。
  • 在學C語言的人,怎能不了解這些經典算法問題?
    C語言中有有許多經典的算法,這些算法都是許多人的智慧結晶,也是編程中常用的算法,這裡面包含了眾多算法思想,掌握這些算法,對於學習更高級的、更難的算法都會有很大的幫助,會為自己的算法學習打下堅實的基礎。
  • C語言基礎知識學習經典入門
    目錄1 本課概要... 12 C語言入口方法... 13 C語言標準輸入與輸出... 1
  • 求1000以內的水仙花數
    (PS:「求1000以內的水仙花數」這道題阿湯哥記憶猶新。到現在還記得這是我大一上學期期末考試的編程題。)首先給出水仙花數定義。22、求它的十位數,把這個數先除以10,商等於13,商13再對10求餘數,得到十位數b=13%10=33、求它的百位數,把這個數對100求商,百位數c=132/100=1我們來C語言編程實現「求1000以內的水仙花數
  • c語言編程軟體哪個好?c語言編程軟體下載地址
    c語言編程軟體哪個好?c語言編程軟體下載地址 2019年1月14日 HuangJiang來源:網際網路 繁體
  • 現代程式語言起點,C語言之環境搭建
    1972 年,為了移植與開發 UNIX 作業系統,丹尼斯·裡奇在貝爾電話實驗室設計開發了 C 語言。UNIX 作業系統,C編譯器,和幾乎所有的 UNIX 應用程式都是用 C 語言編寫的。C 語言是一種廣泛使用的計算機語言,它與 Java 程式語言一樣普及,二者在現代軟體程式設計師之間都得到廣泛使用。C 語言被廣泛使用,比如:Linux 作業系統和 RDBMS(關係資料庫管理系統) MySQL 都是使用 C 語言編寫的。
  • R語言中求解一元方程的根
    在R語言中可以使用uniroot函數求解一元方程的根。最終求得的結果為-0.6666667(root$root),將該值代入到函數中時的函數值為0(root$f.root)。求解一元二次方程求解形如f(x)=ax^2 + bx + c的方程的解。如求出方程x^2 - x - 6 = 0的根。
  • 8個基礎且實用的C語言經典實例【附源碼】
    if (i % 2 == 0) printf("\n");/*控制輸出,每行四個*/        f1 = f1 + f2; /*前兩個月加起來賦值給第三個月*/        f2 = f1 + f2; /*前兩個月加起來賦值給第三個月*/    }    return 0;}3、判斷101-200之間有多少個素數,並輸出所有素數及素數的個數
  • C語言簡單編程速成
    我們將所有的 C 語言要素放置到一份易讀的備忘錄上。1972 年,丹尼斯·裡奇Dennis Ritchie任職于貝爾實驗室Bell Labs,在幾年前,他和他的團隊成員發明了 Unix 。例如,C 語言的特性之一是數組,但是它不提供字典(除非你自己寫一個)。當你學習 C 語言時,你會學習編程的基礎組成部分,它可以幫助你認識到如今的程式語言的改進及其的精心設計。因為 C 語言是一種最小化的程式語言,你的應用程式很可能會獲得性能上的提升,這在其它許多程式語言中是看不到的。
  • LabVIEW編程:使用公式節點,簡化程序代碼,求解一元二次方程根
    公式節點介紹LabVIEW是一種圖形化的程式語言,在框圖程序中,如果涉及到了複雜的數學運算,框圖程序的連線將會十分繁瑣複雜,而且不直觀,調試、改錯也不是太方便,這時候,就可以用LabVIEW中提供的公式節點函數實現相應的計算功能了,其位於函數面板的
  • 程式設計師編程之路的基礎C語言
    尤其是考C語言的小夥伴,小編用這兩三年的編程知識為你們在考前突擊突擊,希望能夠有點用處,至於office,小編覺得無能為力。。。字太多,看的頭疼~~~ 作者:浪潮之巔的小蘿蔔頭(純手打,求支持!)首先帶領大家了解下C語言的二級考題題型、分值和評分標準:1、選擇題:40題,每題1分。按標答給分 2、程序填空:3處空,每空6分。共18分,按標答給分,如果和標答的寫法不一樣,就算對的也沒有分。