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

C語言用遞歸函數(shù)對素數(shù)進行判斷流程

 更新時間:2022年09月22日 09:23:12   作者:碳基肥宅  
素數(shù)判斷是編程語言學(xué)習(xí)過程中一個老生常談的話題,而它的實現(xiàn)也有多種算法,包括經(jīng)典的試除法(以及試除法的幾種優(yōu)化),進階的素數(shù)表篩選法,埃拉托斯特尼篩法和歐拉篩法(以及它們的優(yōu)化)等。對以上算法感興趣的朋友們,不妨搜索“素數(shù)判斷的N種境界”來學(xué)習(xí)了解

前言

本文介紹遞歸函數(shù)實現(xiàn)素數(shù)判斷。

事實上,遞歸算法判斷素數(shù)的本質(zhì)是試除法,且遞歸算法在本題中并不具有優(yōu)勢。它不僅沒有優(yōu)化原算法,還增加了空間復(fù)雜度與時間復(fù)雜度。

時間復(fù)雜度和空間復(fù)雜度都是0(N),實現(xiàn)效率可想而知。

那為什么還要寫呢?僅作為開拓思路、加深對遞歸函數(shù)的理解而為之。其實很多基礎(chǔ)的算法,包括斐波那契數(shù)列、閏年等,都可以用遞歸實現(xiàn)。遞歸思路能將復(fù)雜的問題呈現(xiàn)以簡單的思路,這是它的優(yōu)勢。通過簡單問題的遞歸實現(xiàn),大家可以提前熟悉遞歸的構(gòu)造和運用,為后續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)“樹”的相關(guān)內(nèi)容作鋪墊。

在實際應(yīng)用中,最好還是挑選簡便高效的代碼實現(xiàn)。

題干:用遞歸函數(shù)判斷一個自然數(shù)是否為素數(shù)。

思路簡述

1. 素數(shù):該數(shù)除了1和它本身以外不再有其他的因數(shù)(否則稱為合數(shù))。每一個比1大的整數(shù),要么本身是一個質(zhì)數(shù),要么可以寫成一系列質(zhì)數(shù)的乘積。最小的質(zhì)數(shù)是2。

2. 試除法

思路

1. 要判斷數(shù) i 是否為素數(shù),由上述定義可知,需要判斷除了1和它本身以外是否還有其他因數(shù)。

2. 判斷方式:試除。將該數(shù)與從2到 i-1 之間所有的數(shù)除一除,看除不除得盡。若除得盡,說明該數(shù)有除了1和它本身外的其它因數(shù),因此它就不是素數(shù)。要是除不盡,那就是素數(shù)。(該部分用遞歸可以實現(xiàn))

3. 偶數(shù)一定不是素數(shù),因而能被2模盡的數(shù)不是素數(shù)。

試除法參考代碼如下

//試除法例題--打印100到200之間的素數(shù)
int main()
{
	int i = 0;
	int count = 0;
	for(i=101; i<=200; i+=2)    //跳過所有的偶數(shù)
	{
		//判斷i是否為素數(shù)
		//2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
				break;
		}
		if(j > sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

4. 將循環(huán)部分抽象成遞歸

由于每次判斷素數(shù)的抽象步驟都是一樣的:取模 --> 除盡了嗎?(模為0嗎) --> 除盡了,不是素數(shù) --> 沒除盡,接著除,全除完了還沒有發(fā)現(xiàn)一個能除盡的 --> 是素數(shù)。

因而,改裝成如下代碼。

代碼實現(xiàn)

#include<stdio.h>
int isPrime(int num, int divide)
{
	if(num == 2)    //2是最小的質(zhì)數(shù)
		return 1;
	if(divide == 2)      //divide為2時,遞歸層數(shù)已經(jīng)很深了
		return (num % 2 != 0);    //若(num % 2)為0,則為偶數(shù)不是素數(shù),返回0(false);
                                  //反之返回1(true)
	if(num % divide == 0)
		return 0;    //如果能除盡,就不是素數(shù)
	else
		return isPrime(num, divide - 1);    //遞歸調(diào)用語句,含義是遍歷從2到(num-1)中的所有數(shù)
                                            //用(divide-1)實現(xiàn)模數(shù)每次遞減1,挨個遍歷
}
int main()
{
	int num;
	scanf("%d", &num);
	printf("%d", isPrime(num, num - 1));
	return 0;
}

到此這篇關(guān)于C語言用遞歸函數(shù)對素數(shù)進行判斷流程的文章就介紹到這了,更多相關(guān)C語言素數(shù)判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中二叉堆排序詳解

    C++中二叉堆排序詳解

    這篇文章主要介紹了C++中二叉堆排序詳解,主要介紹了二叉堆排序(遞歸和非遞歸實現(xiàn)上沉、下沉算法),需要的朋友可以參考下
    2023-01-01
  • C語言特殊符號的補充理解

    C語言特殊符號的補充理解

    這篇文章主要為大家介紹了C語言特殊符號的使用補充理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • C++超詳細講解數(shù)組操作符的重載

    C++超詳細講解數(shù)組操作符的重載

    C 語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。接下了讓我們探究一下數(shù)組操作符的重載
    2022-06-06
  • C++自帶的sort函數(shù)如何對vector容器元素進行排序

    C++自帶的sort函數(shù)如何對vector容器元素進行排序

    這篇文章主要介紹了C++自帶的sort函數(shù)如何對vector容器元素進行排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C++ 冒泡排序數(shù)據(jù)結(jié)構(gòu)、算法及改進算法

    C++ 冒泡排序數(shù)據(jù)結(jié)構(gòu)、算法及改進算法

    冒泡排序是一種簡單排序。這種排序是采用“冒泡策略”將最大元素移到最右邊。在冒泡過程中,相鄰兩個元素比較,如果左邊大于右邊的,則進行交換兩個元素。這樣一次冒泡后,可確保最大的在最右邊。然后執(zhí)行n次冒泡后排序即可完畢
    2013-04-04
  • C++算法設(shè)計之馬踏棋盤的實現(xiàn)

    C++算法設(shè)計之馬踏棋盤的實現(xiàn)

    這篇文章主要為大家詳細介紹了C++算法設(shè)計之馬踏棋盤的實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++11-20 常量表達式的使用

    C++11-20 常量表達式的使用

    本文主要介紹了C++11-20常量表達式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言超細致講解分支語句

    C語言超細致講解分支語句

    分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句
    2022-05-05
  • C++類的分離式寫法介紹示例

    C++類的分離式寫法介紹示例

    今天小編就為大家分享一篇關(guān)于C++類的分離式寫法介紹示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解C++ new-handler機制

    詳解C++ new-handler機制

    這篇文章主要介紹了C++ new-handler機制的相關(guān)資料,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-11-11

最新評論

吉木萨尔县| 东乌珠穆沁旗| 锡林郭勒盟| 蚌埠市| 灵川县| 墨脱县| 东至县| 双城市| 天柱县| 河曲县| 饶平县| 调兵山市| 比如县| 新野县| 财经| 泌阳县| 曲水县| 海兴县| 青田县| 焦作市| 江永县| 西充县| 千阳县| 屏东市| 东乡| 元氏县| 福清市| 西华县| 乐昌市| 唐河县| 揭阳市| 阿尔山市| 鸡东县| 集安市| 古交市| 德昌县| 重庆市| 金山区| 塔河县| 阳春市| 雷山县|