国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

求1000以?xún)?nèi)所有素?cái)?shù)并輸出的幾種方法

這篇具有很好參考價(jià)值的文章主要介紹了求1000以?xún)?nèi)所有素?cái)?shù)并輸出的幾種方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

今天咱們來(lái)點(diǎn)不一樣的,來(lái)看一下這樣的一道題目,他要求我們把1-1000的素?cái)?shù)全部找到并且輸出

那我們先要了解什么是素?cái)?shù),所謂素?cái)?shù),就是指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。而合數(shù)則恰巧與素?cái)?shù)相反,是指在大于1的整數(shù)中除了能被1和本身整除外,還能被其他數(shù)(0除外)整除的數(shù)

解法一

那我們根據(jù)定義解法一就得出來(lái)了,那就是從2開(kāi)始到1000進(jìn)行遍歷,然后一個(gè)一個(gè)確認(rèn)它除了1和它本身還有沒(méi)有其他的因子,然后大家都知道2是最小的素?cái)?shù),而2以外的正偶數(shù)都是合數(shù),所以咱們可以對(duì)它進(jìn)行一些小的改進(jìn)和優(yōu)化??

#include <iostream>
#include <iomanip>? ? //setw()對(duì)應(yīng)的頭文件
using namespace std;
int main () 
{
    int n,i;
    bool k= false ;? ? //設(shè)置布爾類(lèi)型的變量以方便進(jìn)行對(duì)素?cái)?shù)的標(biāo)記
    cout << setw(5) << 2 ;? ? //2是最小的素?cái)?shù)
    for(n=3;n<1001;n+=2){
        k=true;
        for(i=2;i<n;i++){
            if(n%i==0){
            k= false ;
            break;    ? //是合數(shù)就跳出循環(huán)
            }
        }
        if(k){     //由標(biāo)記決定是否為素?cái)?shù)
            cout << setw(5) << n ;? ? //輸出進(jìn)行格式化,以便查看
        }
    }
    return 0;
}

通過(guò)這個(gè)方法是可以做出這道題目的,但是放在洛谷或者學(xué)校的oj網(wǎng)站上卻老是WA,這又是為什么呢,其實(shí)是我們的程序運(yùn)行太過(guò)復(fù)雜,它的時(shí)間復(fù)雜度為O(n),這是很容易使整個(gè)程序崩潰的,所以我們一定要學(xué)會(huì)對(duì)自己的算法進(jìn)行優(yōu)化,降低它的時(shí)間復(fù)雜度和空間復(fù)雜度

優(yōu)化如下??

解法一優(yōu)化

#include <iostream>
#include <iomanip>
using namespace std;
int main () 
{
    int n,i;
    bool k= false ;
    cout << setw(5) << 2 ;
    for(n=3;n<1001;n+=2){
        k=true;
        for(i=2;i<=n/i;i++){       //將i的范圍大大縮小
            if(n%i==0){
            k= false ;
            break;    
            }
        }
        if(k){
            cout << setw(5) << n ;
        }
    }
    return 0;
}
求1000以?xún)?nèi)所有素?cái)?shù)并輸出的幾種方法

這樣我們的程序就能運(yùn)行出來(lái)了,根本就在于我將他的檢測(cè)范圍由原來(lái)的n變成了sqrt(n),也就是n的開(kāi)方,那它的時(shí)間復(fù)雜度自然也從O(n)---變成了---->O(sqrt(n))

以上是我們的解法一,接下來(lái)介紹一種素?cái)?shù)篩查法

解法二

所謂素?cái)?shù)篩查法,顧名思義就是要通過(guò)篩掉合數(shù)的方法來(lái)找出素?cái)?shù)。

這里有一個(gè)定理要介紹給大家:一個(gè)合數(shù)一定能夠?qū)懗扇舾蓚€(gè)素?cái)?shù)之積的形式。那么我們就只需要把2的倍數(shù)找出來(lái)扔掉,3的倍數(shù)找出來(lái)扔掉,5的倍數(shù)找出來(lái)扔掉,7的倍數(shù)找出來(lái)扔掉,11的倍數(shù)找出來(lái)扔掉……以此類(lèi)推,直到這個(gè)素?cái)?shù)是小于等于n開(kāi)方的最大素?cái)?shù)就OK了

然后思路明白了,大家拿代碼實(shí)現(xiàn)就好了。首先要扔掉那就要先存起來(lái),那就要用到數(shù)組這個(gè)東西,這樣的話我們只需要將合數(shù)變成0,素?cái)?shù)留下,最后遍歷數(shù)組的時(shí)候判斷一下就OK了。

但是值得大家注意的一點(diǎn)是:這幾個(gè)素?cái)?shù)因子也會(huì)被判斷為合數(shù),故此我們要提前輸出這幾個(gè)素?cái)?shù)因子以保證它的完整性

#include <iostream>
#include <iomanip> 
using namespace std;
int main()
{
    int a[1001]={0};
    int i;
    cout << setw(5) << 2 << setw(5) << 3 << setw(5) << 5 << setw(5) << 7 ;
? ? cout << setw(5) << 11 << setw(5) << 13 << setw(5) << 17<< setw(5) << 19 ;
? ? cout << setw(5) << 23 << setw(5) << 29 << setw(5) << 31 ;     
                             //這是在保證完整性!?。。ǚ挪幌戮蛯?xiě)下一行了)
    for(i=3;i<1001;i++){
        if(i%2!=0&&i%3!=0&&i%5!=0&&i%7!=0&&i%11!=0&&i%13!=0&&i%17!=0&&i%19!=0&&i%23!=0&&i%29!=0&&i%31!=0)
        a[i]=i;? ? ? ? //是質(zhì)數(shù)才輸入,否則就是初始化的0
    }
    for(i=0;i<1001;i++){
        if(a[i]!=0)? ? ? ? //判斷是否為素?cái)?shù)
        cout << setw(5) << a[i] ;
    }
    return 0;
}

對(duì)于這個(gè)解法的優(yōu)化方法,我們還要用到另一個(gè)定理——從5開(kāi)始,素?cái)?shù)一定在6的倍數(shù)周?chē)ㄖ槐人?或小1),有了這個(gè)定理,那我們的數(shù)據(jù)范圍就會(huì)變得更小,改進(jìn)如下??

解法二優(yōu)化

#include <iostream>
using namespace std;
#include <iomanip>
int isPrime (int a);? ? ? ? //聲明一個(gè)新的函數(shù)來(lái)判斷是否為素?cái)?shù)
int main()
{
    int a,b,i;
    cout << setw(5) << 2 << setw(5) << 3 << setw(5) << 5 << setw(5) << 7 ;
    cout << setw(5) << 11 << setw(5) << 13 << setw(5) << 17<< setw(5) << 19 ;
    cout << setw(5) << 23 << setw(5) << 29 << setw(5) << 31 ;  
    for(i=6;i<167;i++){
        a=6*i-1;
        b=6*i+1;
        if(isPrime (a))
        cout << setw(5) << isPrime (a) ;? ? ? ? //返回了非零數(shù)字就輸出
        if(isPrime (b))
        cout << setw(5) << isPrime (b) ;? ? ? ? //返回了非零數(shù)字就輸出
    }
    return 0;
}
int isPrime (int a)
{
    if(a%2!=0&&a%3!=0&&a%5!=0&&a%7!=0&&a%11!=0&&a%13!=0&&a%17!=0&&a%19!=0&&a%23!=0&&a%29!=0&&a%31!=0)
    return a ;? ? ? ? ? ? //如果為素?cái)?shù)返回此數(shù)
    else 
    return false ;? ? ? ? //如果為合數(shù)終止程序
}

這就是查找素?cái)?shù)的方法,還有一種運(yùn)用費(fèi)馬小定理的解法,那個(gè)方法只能保證找到的數(shù)字大概率是素?cái)?shù),不能夠百分百的保證,所以暫時(shí)先不給大家介紹誤導(dǎo)大家了。希望以上的解法對(duì)大家有所幫助,謝謝大家的閱讀~~~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457459.html

到了這里,關(guān)于求1000以?xún)?nèi)所有素?cái)?shù)并輸出的幾種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語(yǔ)言 五種方法輸出100以?xún)?nèi)的素?cái)?shù)(質(zhì)數(shù)) 源碼

    C語(yǔ)言 五種方法輸出100以?xún)?nèi)的素?cái)?shù)(質(zhì)數(shù)) 源碼

    目錄 ? 寫(xiě)在前面: 輸出前20萬(wàn)個(gè)素?cái)?shù),對(duì)比簡(jiǎn)單遍歷和歐拉篩選的運(yùn)行時(shí)間。 簡(jiǎn)單遍歷: 歐拉篩選: 一、簡(jiǎn)單遍歷 二、遍歷至該數(shù)的平方根??? ?? 三、用x/i來(lái)代替sqrt(x) 四、樸素篩法 五、埃式篩法 六、歐拉篩法???????? ? 簡(jiǎn)單遍歷: 3.243秒 歐拉篩選: 0.353秒 ? ??

    2024年02月05日
    瀏覽(24)
  • C語(yǔ)言中判斷素?cái)?shù)的幾種方法

    C語(yǔ)言中判斷素?cái)?shù)的幾種方法

    作為C的初學(xué)者們希望大家看看這幾種判斷素?cái)?shù)的方法 既然進(jìn)來(lái)了就看完把 題目要求: 判斷n是否為素?cái)?shù)。 首先我們講一下素?cái)?shù)的判定:素?cái)?shù)就是只能被1或者本身整除的數(shù),這就延伸出了幾種不同的判定方法。 方法一:因?yàn)榕袛嗨財(cái)?shù)相當(dāng)于就是判斷這個(gè)數(shù)能不能整除2-這個(gè)數(shù)

    2024年02月11日
    瀏覽(15)
  • C語(yǔ)言--編寫(xiě)函數(shù)判斷一個(gè)數(shù)是否為素?cái)?shù),在主函數(shù)中調(diào)用該函數(shù)輸出100以?xún)?nèi)的全部素?cái)?shù)。
  • 在python中查看輸出結(jié)果的幾種方法

    在Python中,查看代碼的輸出結(jié)果通常有多種方法,這取決于你的開(kāi)發(fā)環(huán)境、代碼結(jié)構(gòu)以及代碼運(yùn)行的上下文。下面列舉了一些常見(jiàn)的查看Python代碼輸出結(jié)果的方法,并為每種方法提供了相應(yīng)的代碼示例。 ?1. 使用 `print()` 語(yǔ)句: `print()` 是最簡(jiǎn)單直接的輸出方法,可以在代碼中

    2024年03月18日
    瀏覽(31)
  • MCU輸出日志和調(diào)試信息的幾種方法

    MCU輸出日志和調(diào)試信息的幾種方法

    基于MCU的嵌入式軟件開(kāi)發(fā),可能在某些情況下沒(méi)有多余存儲(chǔ)空間,從而沒(méi)有在本地有效保存調(diào)試和日志信息。 這時(shí),通過(guò)某種方式把調(diào)試(Debug)和日志(Log)信息輸出就顯得有意義了。 下面就來(lái)講講關(guān)于嵌入式開(kāi)發(fā)中輸出調(diào)試和日志信息的幾點(diǎn)內(nèi)容。 標(biāo)準(zhǔn)庫(kù) printf 直接輸出

    2024年03月15日
    瀏覽(28)
  • 【Qt】qDebug() 輸出16進(jìn)制數(shù)的幾種方法

    Qt qDebug() 輸出16進(jìn)制數(shù)字的幾種方法整理:

    2024年04月28日
    瀏覽(27)
  • [c語(yǔ)言]求100以?xún)?nèi)的素?cái)?shù)

    (一)、 關(guān)于整除算法: 要判斷某數(shù)是不是質(zhì)數(shù),不必驗(yàn)證某數(shù)m是否被2~m-1的某一個(gè)整數(shù)整除,只需驗(yàn)證是否被2~sqrt(m)的某一個(gè)整數(shù)去除就可以了。若只要m被2~sqrt(m)的某個(gè)整數(shù)整除了,那么它就不是質(zhì)數(shù)。例16能被2,4,8整除,根號(hào)16=4,2為2~4之間的一個(gè)整數(shù) (二)、

    2024年02月06日
    瀏覽(20)
  • python的幾種輸出方式

    python的幾種輸出方式

    1.輸出百分比方法 2. print(f “{}”) 的用法 3. .format格式 ? 4. 加號(hào)拼接(針對(duì)字符串) 擴(kuò)展知識(shí) -格式化輸出 字符 含有 %s 字符串 %d 有符號(hào)十進(jìn)制整數(shù),%06d表示輸出的整數(shù)顯示位數(shù)字,不足的地方使用0補(bǔ)全 %f 浮點(diǎn)數(shù),%.02f表示小數(shù)點(diǎn)后只顯示兩位 %% 輸出% ?%s:代表字符串的占

    2024年04月15日
    瀏覽(25)
  • 使用篩選法求出 n 以?xún)?nèi)的素?cái)?shù)

    輸入描述: 多組輸入,每行輸入一個(gè)正整數(shù)(不大于100)。 輸出描述: 針對(duì)每行輸入的整數(shù)n,輸出兩行,第一行,輸出n之內(nèi)(包括n)的素?cái)?shù),用空格分隔, 第二行,輸出數(shù)組中2之后被清0 的個(gè)數(shù)。每行輸出后換行 篩選法求解過(guò)程為:將2~n之間的正整數(shù)放在數(shù)組內(nèi)存儲(chǔ),

    2024年02月13日
    瀏覽(21)
  • chatGPT流式輸出的幾種方式

    前言 chatGPT是一款高效強(qiáng)大的語(yǔ)言模型,能夠給我們的生活帶來(lái)極大的改變。無(wú)論是學(xué)習(xí)知識(shí)還是工作效率,chatGPT都能為我們提供有力的幫助。它可以幫助我們快速獲取所需的知識(shí),同時(shí)可以幫助我們提高工作效率,包括寫(xiě)文章、文案、推薦策略、生成代碼、寫(xiě)周報(bào),流程圖

    2024年02月06日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包