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

C語(yǔ)言求質(zhì)數(shù)的幾種簡(jiǎn)單易懂方式

 更新時(shí)間:2022年12月27日 08:47:35   作者:我的博爾赫斯  
這篇文章主要介紹了C語(yǔ)言求質(zhì)數(shù)的幾種簡(jiǎn)單易懂方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

質(zhì)數(shù)就是除了1和它本身外沒(méi)有其他因數(shù)

一. 暴力枚舉

假設(shè)現(xiàn)在有一個(gè)數(shù)num,要求我們判斷是否是質(zhì)數(shù),由定義知我們可以遍歷從2到 num-1的所有數(shù),假

設(shè)都不能被整除,則num是質(zhì)數(shù),否則不是,C語(yǔ)言代碼實(shí)現(xiàn)如下。

其中track用來(lái)檢測(cè)是否遍歷完從2到num-1的所有數(shù)

int main()
{
	int n = 0;
	int track = 0;
	printf("請(qǐng)輸入要判斷的數(shù): ");
	scanf("%d", &n);
	for (int i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			track = 1;
			break;
		}
	}
	if (track == 1)
		printf("這個(gè)數(shù)不是質(zhì)數(shù)\n");
	else
		printf("這個(gè)數(shù)是質(zhì)數(shù)\n");
	return 0;
}

二. 暴力求解的優(yōu)化版本

實(shí)際上我們只需要遍歷從2到√num的數(shù)就可以了。

因?yàn)閷?duì)于非質(zhì)數(shù)num來(lái)說(shuō)有 a * b = num;其中a和b不可能同時(shí)大于√num,也就是說(shuō)num是非質(zhì)數(shù)的充要條件是在 [2,num-1]的區(qū)間上有因數(shù),根據(jù)這一點(diǎn)可以對(duì)代碼進(jìn)行優(yōu)化。

int main()
{
	int n = 0;
	int track = 0;
	printf("請(qǐng)輸入要判斷的數(shù): ");
	scanf("%d", &n);
		for (int i = 2; i <= sqrt(n); i++)
		{
			if (n % i == 0)
			{
				track = 1;
				break;
			}
		}
		if (track == 1)
			printf("這個(gè)數(shù)不是質(zhì)數(shù)\n");
		else
			printf("這個(gè)數(shù)是質(zhì)數(shù)\n");
	
	return 0;
}

三.埃拉托斯特尼篩法

如果要求我們判斷的數(shù)字很多,那么上面兩種方法的效率就極其低下,因?yàn)槊颗袛嘁粋€(gè)數(shù)都要從2開(kāi)始遍歷,計(jì)算機(jī)會(huì)做很多重復(fù)操作。

換一種思路,我們可以選一批質(zhì)數(shù),質(zhì)數(shù)的倍數(shù)是合數(shù)(非質(zhì)數(shù)),那么就可以把這些合數(shù)篩掉,經(jīng)過(guò)多輪篩選后剩下的就全部是質(zhì)數(shù)了。

看了前面的敘述可能有的朋友會(huì)有點(diǎn)懵,我解釋一下。

細(xì)節(jié)部分 

1. 怎樣選一批素?cái)?shù)能將區(qū)間內(nèi)所有合數(shù)都篩完?

從2開(kāi)始到√n的所有素?cái)?shù)。首先1肯定沒(méi)有篩選功能(1的任意倍數(shù)都是其本身)。

對(duì)于√n之后的素?cái)?shù),比如說(shuō)用√n + 1進(jìn)行篩選 ,得到的可篩選的數(shù)是 [(√n + 1) *  2, (√n +1) * √n] 中的整數(shù),但是這些整數(shù)都有一個(gè)小于等于√n的約數(shù),因此在我們遍歷前面的數(shù)時(shí)已經(jīng)將他們刪除掉了,所以沒(méi)必要重復(fù),只需要 [2,√n)的所有素?cái)?shù)即可。 

2.篩選過(guò)程具體是怎樣的?

不清楚篩選過(guò)程的朋友可以看看這張圖,這張圖搬運(yùn) 自公眾號(hào) “coder梁”,做的特別清楚。

3.具體代碼

C語(yǔ)言實(shí)現(xiàn)。

int main()
{
	//埃式篩法
	int n = 0;
	printf("請(qǐng)輸入要判斷的數(shù) ");
	scanf("%d", &n);
	int* prime = (int*)malloc(n * sizeof(int));//定義一個(gè)可以存放n個(gè)數(shù)的數(shù)組
	if (!prime)
	{
		printf("創(chuàng)建數(shù)組失敗\n");
		exit(-1);
	}
	//將prime數(shù)組全部初始化成1,表示全部是素?cái)?shù)
	for (int i = 0; i < n; i++)
	{
		prime[i] = 1;
	}
	//從2開(kāi)始篩選
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (prime[i - 1])        //如果是質(zhì)數(shù)
		{
			for (int j = i * i; j <= n; j += i) //則將其剔除
				prime[j - 1] = 0;
		}
	}
	//打印
	for (int i = 0; i < n; i++)
	{
		if (prime[i] != 0)
			printf("%d ", i + 1);
	}
	printf("\n");
	return 0;
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Qt?自定義屬性Q_PROPERTY不顯示float類(lèi)型的解決

    Qt?自定義屬性Q_PROPERTY不顯示float類(lèi)型的解決

    這篇文章主要介紹了Qt?自定義屬性Q_PROPERTY不顯示float類(lèi)型的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 在Qt中使用OpenGL繪制三角形指南

    在Qt中使用OpenGL繪制三角形指南

    在高性能渲染場(chǎng)景中,CPU資源常被過(guò)度消耗,導(dǎo)致界面卡頓,而OpenGL作為業(yè)界標(biāo)準(zhǔn)的圖形API,能通過(guò)GPU硬件加速顯著降低CPU負(fù)載,本文將以繪制三角形為例,教你如何通過(guò)Qt的QOpenGLWidget和QOpenGLFunctions實(shí)現(xiàn)跨平臺(tái)GPU渲染,感興趣的朋友一起看看吧
    2025-04-04
  • 老程序員教你一天時(shí)間完成C++俄羅斯方塊游戲

    老程序員教你一天時(shí)間完成C++俄羅斯方塊游戲

    俄羅斯方塊游戲大家應(yīng)該非常熟悉,非常經(jīng)典的一款游戲,本文來(lái)詳細(xì)講解下俄羅斯方塊游戲的制作過(guò)程,趕緊來(lái)看下吧!希望能給你帶來(lái)幫助
    2021-08-08
  • Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解

    Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解

    這篇文章主要介紹了Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解,對(duì)于學(xué)習(xí)Windows程序設(shè)計(jì)來(lái)說(shuō)是非常重要的一課,需要的朋友可以參考下
    2014-08-08
  • C++中關(guān)鍵字Struct和Class的區(qū)別

    C++中關(guān)鍵字Struct和Class的區(qū)別

    這篇文章主要介紹了C++中關(guān)鍵字Struct和Class的區(qū)別,本文用大量實(shí)例講解了Struct和Class的區(qū)別,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言實(shí)現(xiàn)數(shù)組移位、前移、后移與整體移動(dòng)實(shí)例代碼

    C語(yǔ)言實(shí)現(xiàn)數(shù)組移位、前移、后移與整體移動(dòng)實(shí)例代碼

    C語(yǔ)言中通??梢允褂醚h(huán)語(yǔ)句實(shí)現(xiàn)數(shù)組的移動(dòng),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)數(shù)組移位、前移、后移與整體移動(dòng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • c語(yǔ)言中g(shù)etch,getche,getchar的區(qū)別

    c語(yǔ)言中g(shù)etch,getche,getchar的區(qū)別

    getche() 和getch()很相似,它也需要引入頭文件conio.h,那它們之間的區(qū)別又在哪里呢?不同之處就在于getch()無(wú)返回顯示,getche()有返回顯示
    2013-09-09
  • c語(yǔ)言冒泡排序法代碼

    c語(yǔ)言冒泡排序法代碼

    c語(yǔ)言冒泡排序法代碼,這個(gè)是大家最早接觸的算法吧,總在寫(xiě) 總在錯(cuò),學(xué)習(xí)就是這么個(gè)過(guò)程, 溫故才知新, 望自己謹(jǐn)記
    2013-02-02
  • C語(yǔ)言折半查找法介紹及使用示例

    C語(yǔ)言折半查找法介紹及使用示例

    折半查找法也叫做?分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪?半中,再重復(fù)上述步驟知道找到?標(biāo)key,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言折半查找法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • C語(yǔ)言 sockaddr和sockaddr_in案例詳解

    C語(yǔ)言 sockaddr和sockaddr_in案例詳解

    這篇文章主要介紹了C語(yǔ)言 sockaddr和sockaddr_in案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

西乌珠穆沁旗| 安泽县| 岫岩| 灌阳县| 巴彦淖尔市| 临夏县| 专栏| 隆化县| 英超| 麦盖提县| 伊金霍洛旗| 金寨县| 宿迁市| 五常市| 固镇县| 大宁县| 比如县| 宕昌县| 连云港市| 凤山市| 乐清市| 定襄县| 河南省| 富川| 藁城市| 吉隆县| 临沧市| 温宿县| 于田县| 曲松县| 万盛区| 水城县| 绿春县| 康马县| 全州县| 湖州市| 迭部县| 会昌县| 胶州市| 五台县| 宁德市|