最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++判斷素?cái)?shù)的三種方法

 更新時(shí)間:2023年12月19日 10:01:52   作者:釋懷、過客。  
這篇文章主要給大家介紹了C/C++判斷素?cái)?shù)的三種方法,常規(guī)的函數(shù)判斷法,埃氏篩法和歐拉篩法這三種方法,并通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下

1.常規(guī)的函數(shù)判斷法

假如題目是我們要求 1~n之間的素?cái)?shù)并打印出來,我們可以寫如下函數(shù):

int prime(int i) // 求是否為素?cái)?shù)需要考慮1,2兩種情況
{
    if (i == 1) return 0;
    if (i == 2) return 1;
    for (int j = 2; j * j <= i; ++j)
        if (i % j == 0)//如果遇到j(luò)是i的因數(shù),i就不是質(zhì)數(shù),返回0
            return 0;
    return 1;//沒有找到這個(gè)數(shù)的因數(shù)就返回1
}
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
        if (prime(i))
            printf("%d ", i);
    return 0;
}

2.埃氏篩法

我們?cè)谟變簣@就學(xué)過合數(shù)是除了能被1和它本身整除,還能被其他的正整數(shù)整除的數(shù),然而合數(shù)還有如下定義:當(dāng)一個(gè)數(shù)可以被素?cái)?shù)之乘積表示時(shí),它被稱為合數(shù)。這是基本定理算術(shù),也被稱為唯一素因數(shù)分解定理。這個(gè)定理表明任何一個(gè)大于1的整數(shù)都可以被唯一地分解成素?cái)?shù)的乘積。

埃氏篩核心思想就是 從第一個(gè)沒有被篩除過數(shù)(num)的開始,在給定的范圍內(nèi)依次篩去num的倍數(shù),例如,num=2,我們可以依次篩去4,6,8......;對(duì)于,num=n,依次篩除 k*n(k=1,2,3...);

代碼實(shí)現(xiàn):

int pri[10000001];
int main()
{ 
    int n;
    scanf("%d",&n);
    for(int i = 2; i*i <= n; i++)//埃氏篩   時(shí)間復(fù)雜度接近于線性(n*lnln(n))
	{
		if(pri[i] == 0)
		{
			for(int j = i * i; j <= n; j += i)
			    pri[j] = 1; // j是i的一個(gè)倍數(shù),則j是合數(shù),篩掉。
		}
        
}

3.歐拉篩

這是對(duì)埃氏篩的優(yōu)化,埃氏篩法在執(zhí)行時(shí)可能會(huì)對(duì)同一個(gè)數(shù)進(jìn)行多次篩除

比如num=120  會(huì)在i=(2,3,4,6......)的時(shí)候分別篩除一次,而且數(shù)越大會(huì)被篩除的次數(shù)越多,就造成了很大的時(shí)間浪費(fèi)

而歐拉篩的核心思想就是確保每個(gè)合數(shù)只被最小質(zhì)因數(shù)篩掉。

代碼實(shí)現(xiàn):

int vis[10000001];
int pri[10000001];
int main()
{ 
    int n=10000,m=0,cnt=0;
 
    for (int i = 2; i <= n; i ++ )//歐拉篩 時(shí)間復(fù)雜度基本為O(n)
    {
        if (vis[i] == 0) pri[cnt ++ ] = i;//將質(zhì)數(shù)存到pri中
        for (int j = 0; pri[j] * i <= n; j ++ )//要確保當(dāng)前質(zhì)數(shù)的i倍小于等于n。
        {
            vis[pri[j] * i] = 1;
           
            if (i % pri[j] == 0) break;//終止條件(當(dāng)前數(shù)i遇到了它的最小質(zhì)因數(shù))
        }
    }
     
 
    return 0;
}

以上就是C/C++判斷素?cái)?shù)的三種方法的詳細(xì)內(nèi)容,更多關(guān)于C/C++判斷素?cái)?shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c語言快速排序算法示例代碼分享

    c語言快速排序算法示例代碼分享

    快速排序使用分治法(Divide and conquer)策略來把一個(gè)串行(list)分為兩個(gè)子串行(sub-lists)
    2014-02-02
  • C++ WideCharToMultiByte()函數(shù)案例詳解

    C++ WideCharToMultiByte()函數(shù)案例詳解

    這篇文章主要介紹了C++ WideCharToMultiByte()函數(shù)案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++短路求值(邏輯與、邏輯或)實(shí)例

    C++短路求值(邏輯與、邏輯或)實(shí)例

    這篇文章主要介紹了C++短路求值(邏輯與、邏輯或)實(shí)例,以實(shí)例形式講述了邏輯或的短路與邏輯與的短路及相應(yīng)的應(yīng)用實(shí)例,需要的朋友可以參考下
    2014-10-10
  • 隨機(jī)數(shù)字去掉重復(fù)和排序的方法

    隨機(jī)數(shù)字去掉重復(fù)和排序的方法

    用計(jì)算機(jī)隨機(jī)生成了N個(gè)0到1000000000(包含0和1000000000)之間的隨機(jī)整數(shù)(N≤5000000),對(duì)于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉。然后再把這些數(shù)從小到大排序。
    2013-03-03
  • C語言字符串函數(shù)模擬實(shí)現(xiàn)流程介紹

    C語言字符串函數(shù)模擬實(shí)現(xiàn)流程介紹

    字符串函數(shù)(String processing function)也叫字符串處理函數(shù),指的是編程語言中用來進(jìn)行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進(jìn)行字符串拷貝,計(jì)算長(zhǎng)度,字符查找等的函數(shù)
    2022-09-09
  • C語言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    C語言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實(shí)現(xiàn)LeetCode(88.混合插入有序數(shù)組)

    C++實(shí)現(xiàn)LeetCode(88.混合插入有序數(shù)組)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(88.混合插入有序數(shù)組),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++11 強(qiáng)類型枚舉相關(guān)總結(jié)

    C++11 強(qiáng)類型枚舉相關(guān)總結(jié)

    這篇文章主要介紹了C++11 強(qiáng)類型枚舉的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++11,感興趣的朋友可以了解下
    2021-02-02
  • C語言中的函數(shù)指針學(xué)習(xí)筆記

    C語言中的函數(shù)指針學(xué)習(xí)筆記

    這篇文章主要介紹了C語言中的函數(shù)指針的一些學(xué)習(xí)知識(shí)點(diǎn)記錄,文中作者整理了一些比較interesting的函數(shù)指針用法,需要的朋友可以參考下
    2016-04-04
  • C++實(shí)現(xiàn)支持泛型的LFU詳解

    C++實(shí)現(xiàn)支持泛型的LFU詳解

    這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)LFU的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評(píng)論

绥江县| 大安市| 手游| 淮安市| 吉木萨尔县| 滨州市| 广宗县| 甘孜| 奉化市| 宁波市| 青铜峡市| 化德县| 万全县| 个旧市| 左云县| 隆德县| 新乡市| 周宁县| 崇左市| 南丰县| 铜川市| 布尔津县| 隆德县| 洞头县| 常宁市| 资源县| 徐汇区| 昌邑市| 凤山县| 新化县| 伊金霍洛旗| 大关县| 普格县| 平武县| 大理市| 江津市| 茶陵县| 江都市| 淮滨县| 蒙阴县| 马尔康县|