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

C語(yǔ)言用遞歸函數(shù)對(duì)素?cái)?shù)進(jìn)行判斷流程

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

前言

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

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

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

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

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

題干:用遞歸函數(shù)判斷一個(gè)自然數(shù)是否為素?cái)?shù)。

思路簡(jiǎn)述

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

2. 試除法

思路

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

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

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

試除法參考代碼如下

//試除法例題--打印100到200之間的素?cái)?shù)
int main()
{
	int i = 0;
	int count = 0;
	for(i=101; i<=200; i+=2)    //跳過(guò)所有的偶數(shù)
	{
		//判斷i是否為素?cá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)部分抽象成遞歸

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

因而,改裝成如下代碼。

代碼實(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í),遞歸層數(shù)已經(jīng)很深了
		return (num % 2 != 0);    //若(num % 2)為0,則為偶數(shù)不是素?cái)?shù),返回0(false);
                                  //反之返回1(true)
	if(num % divide == 0)
		return 0;    //如果能除盡,就不是素?cái)?shù)
	else
		return isPrime(num, divide - 1);    //遞歸調(diào)用語(yǔ)句,含義是遍歷從2到(num-1)中的所有數(shù)
                                            //用(divide-1)實(shí)現(xiàn)模數(shù)每次遞減1,挨個(gè)遍歷
}
int main()
{
	int num;
	scanf("%d", &num);
	printf("%d", isPrime(num, num - 1));
	return 0;
}

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

相關(guān)文章

  • opencv實(shí)現(xiàn)棋盤格檢測(cè)

    opencv實(shí)現(xiàn)棋盤格檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)棋盤格檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn)

    Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn)

    這篇文章主要介紹了Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 概述C++中的 public protected private friend關(guān)鍵字的用法

    概述C++中的 public protected private friend關(guān)鍵字的用法

    這篇文章簡(jiǎn)要概述了C++中的 public protected private friend關(guān)鍵字的用法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串)

    C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(5.最長(zhǎng)回文子串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 總結(jié)IOS中nil、Nil、NULL和NSNull區(qū)別

    總結(jié)IOS中nil、Nil、NULL和NSNull區(qū)別

    相信有不少朋友想知道,在 Objective-C 中 nil 和 Nil 以及 NULL 的區(qū)別。最重要的是,在面試中還有不少朋友常會(huì)被問(wèn)到?,F(xiàn)在小編在這里統(tǒng)一詳細(xì)說(shuō)明。
    2016-08-08
  • C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

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

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 詳解C++元編程之Parser Combinator

    詳解C++元編程之Parser Combinator

    借助C++的constexpr能力,可以輕而易舉的構(gòu)造Parser Combinator,對(duì)用戶定義的字符串(User defined literal)釋放了巨大的潛力。
    2021-05-05
  • C++圖文并茂分析講解內(nèi)存管理

    C++圖文并茂分析講解內(nèi)存管理

    本章主要介紹C語(yǔ)言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語(yǔ)言的內(nèi)存管理方式(new delete對(duì)比 malloc free),感興趣的朋友來(lái)看看吧
    2022-09-09
  • Window10下安裝VS2022社區(qū)版的實(shí)現(xiàn)步驟(圖文教程)

    Window10下安裝VS2022社區(qū)版的實(shí)現(xiàn)步驟(圖文教程)

    很多和同學(xué)們?cè)诮佑|c語(yǔ)言的時(shí)候都是使用VS,本文主要介紹了Window10下如何安裝VS2022社區(qū)版的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++使用yaml-cpp庫(kù)操作YAML的示例代碼

    C++使用yaml-cpp庫(kù)操作YAML的示例代碼

    配置文件有利于我們靈活配置工程,解決大量重復(fù)勞動(dòng),也方便調(diào)試,YAML?是一種人類可讀的數(shù)據(jù)序列化格式,它使用縮進(jìn)和特定的符號(hào)來(lái)表示數(shù)據(jù)結(jié)構(gòu),在本文中,我們將詳細(xì)介紹如何在?C++?中使用?yaml-cpp?庫(kù)來(lái)解析和生成?YAML?格式的數(shù)據(jù),需要的朋友可以參考下
    2024-10-10

最新評(píng)論