欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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++ 形狀類Shape(派生出圓類Circle和矩形類Rectangle)

    c++ 形狀類Shape(派生出圓類Circle和矩形類Rectangle)

    通過C++方式,建立一個(gè)形狀類Shape作為基類,派生出圓類Circle和矩形類Rectangle 求出面積并獲取相關(guān)信息
    2020-11-11
  • 基于Windows API實(shí)現(xiàn)遍歷所有文件并刪除的方法

    基于Windows API實(shí)現(xiàn)遍歷所有文件并刪除的方法

    這篇文章主要介紹了基于Windows API實(shí)現(xiàn)遍歷所有文件并刪除的方法,是win32應(yīng)用程序的一個(gè)比較典型的文件操作應(yīng)用技巧,需要的朋友可以參考下
    2015-04-04
  • c++ 判斷是64位還是32位系統(tǒng)的實(shí)例

    c++ 判斷是64位還是32位系統(tǒng)的實(shí)例

    這篇文章主要介紹了c++ 判斷是64位還是32位系統(tǒng)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • c語言重要的字符串與內(nèi)存函數(shù)

    c語言重要的字符串與內(nèi)存函數(shù)

    這篇文章主要介紹一些c語言中常用字符串函數(shù)和內(nèi)存函數(shù)的使用和注意事項(xiàng),并且為了幫助讀者理解和使用,也都模擬實(shí)現(xiàn)了他們的代碼,需要的朋友可以參考一下
    2021-09-09
  • C語言中字符和字符串處理(ANSI字符和Unicode字符)

    C語言中字符和字符串處理(ANSI字符和Unicode字符)

    這篇文章主要介紹了C語言與C++中字符和字符串處理(ANSI字符和Unicode字符)的詳細(xì)內(nèi)容,非常的全面,這里推薦給大家,希望大家能夠喜歡。
    2015-03-03
  • C/C++實(shí)現(xiàn)獲取系統(tǒng)時(shí)間的示例代碼

    C/C++實(shí)現(xiàn)獲取系統(tǒng)時(shí)間的示例代碼

    C 標(biāo)準(zhǔn)庫提供了 time() 函數(shù)與 localtime() 函數(shù)可以獲取到當(dāng)前系統(tǒng)的日歷時(shí)間。本文將通過一些簡(jiǎn)單的示例為大家講講C++獲取系統(tǒng)時(shí)間的具體方法,需要的可以參考一下
    2022-12-12
  • C++詳細(xì)講解函數(shù)調(diào)用與Struct和CLass的區(qū)別

    C++詳細(xì)講解函數(shù)調(diào)用與Struct和CLass的區(qū)別

    主調(diào)函數(shù)使用被調(diào)函數(shù)的功能,稱為函數(shù)調(diào)用。在C語言/C++中,只有在函數(shù)調(diào)用時(shí),函數(shù)體中定義的功能才會(huì)被執(zhí)行,下面讓我們?cè)敿?xì)來了解
    2022-05-05
  • C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • C++ Boost PropertyTree示例超詳細(xì)講解

    C++ Boost PropertyTree示例超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++深入細(xì)致探究二叉搜索樹

    C++深入細(xì)致探究二叉搜索樹

    二叉搜索樹是以一棵二叉樹來組織的。每個(gè)節(jié)點(diǎn)是一個(gè)對(duì)象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點(diǎn)的左孩子,right指向該節(jié)點(diǎn)的右孩子,p指向該節(jié)點(diǎn)的父節(jié)點(diǎn),key是它的值
    2022-05-05

最新評(píng)論