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

C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法

 更新時間:2023年04月23日 10:11:25   作者:洋-----  
素數(shù)是只能被1和它自己本身整除,不能被其他自然數(shù)整除的大于1的正整數(shù),下面這篇文章主要給大家介紹了關于C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

 需要解決這個問題,首先我們要明白-------->什么是素數(shù)?

(質(zhì)數(shù))素數(shù)是指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。

舉個例子:4  可以 由2*2=4  和1*4 得到,不符合素數(shù)的條件,所以不是素數(shù)。

                  5  只能由1*5 得到,符合素數(shù)的條件,所以是素數(shù)。

好了現(xiàn)在,我們了解了素數(shù)的概念,我們就把它轉(zhuǎn)化成代碼的思想,進行我們的操作了。

1.  第一種方法

這種方法的思想也是最直接最普遍的,假設這個數(shù)是n,我們需要判斷素數(shù),我們就拿這個數(shù)和從(2~~n-1)的每個數(shù)去和這個數(shù)做取余操作,如果有一個數(shù)可以使得余數(shù)為0,則這個數(shù)不是素數(shù),反之則這個數(shù)為素數(shù)。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h>
int main()
{
	int i=0;
	int j=0;
	printf("輸入一個數(shù) "); 
	scanf("%d",&j);
    for(i=2;i<j;i++)
  {
  	if(j%i==0)
  	{
  		printf("%d 不是素數(shù)",j); 
  		break;
	  }
  }
    if(j==i)
    {
    	printf("%d 是素數(shù)",j); 
	}
	if(j==1)
	{
			printf("%d 不是素數(shù)",j); 
	}
	return 0;
	
 } 

 代碼的具體實現(xiàn)就在上面,可能有的同學對if語句中為什么當j==i時,就輸出是素數(shù)。

 不要著急,我給大家捋捋思路,我們可以思考一下,如果在(2~~j-1)中的每一個數(shù)都沒滿足取余操作后余數(shù)為0,那這時我的 i 應該 等于j-1,但我們的 i 由于滿足i<j還會繼續(xù)進行++操作,然后我的 i 就等于j ,此時已經(jīng)不滿足i <j 的條件,我們就會跳出for循環(huán),此時我們就可以認為,當 i==j時,這個數(shù)為素數(shù)。

2.第二種方法

我們對第一種方法進行優(yōu)化,我們通過下述例子分析可知,每個數(shù)的因數(shù)中,其中一個不會超過本身的1/2,所以我們可以利用這個思想對代碼進行優(yōu)化。

我們其實并不需要對(2~~n-1)的全部數(shù)進行上述操作,我們可以只對(2~~n/2)的全部數(shù)進行上面的操作就可以了,這樣可以簡化我們的計算范圍。

舉個例子:4  可以 由2*2=4  和1*4 得到,因數(shù) 2,2或1,4,每組其中的一個因數(shù)不大于自身(4)的1/2。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h>
int main()
{
	int i=0;
	int j=0;
	printf("輸入一個數(shù) "); 
	scanf("%d",&j);
	
	for(i=2;i<=j/2;i++)
 {
	if(j%i==0)
		{
			printf("%d 不是素數(shù)",j);
			break;
		}
 }
     if(j==1)
		{
			printf("%d 不是素數(shù)",j);
		
		}
	if((i>j/2) && (j!=1))
	{
		printf("%d 是素數(shù)",j);
	}
	
	return 0;
}

 大家覺得還能對代碼思想進行優(yōu)化嗎?????

答案是肯定的!

3.第三種方法

我們對第二種方法進行優(yōu)化,我們通過下述例子分析可知,每個數(shù)的因數(shù)中,其中一個不會超過本身的開方,這樣我們又縮小了我們的計算范圍,所以我們可以利用這個思想再次對代碼進行優(yōu)化。

舉個例子:16 可以 由1*16,2*8和4*4,得到,因數(shù)1,16和2,8和4,4每組其中的一個因數(shù)不大于本身(16)的開方(4)。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h>
#include<math.h>
int main()
{
	int i=0;
	int j=0;
	printf("輸入一個數(shù) "); 
	scanf("%d",&j);
	
	for(i=2;i<=sqrt(j);i++)
 {
	if(j%i==0)
		{
			printf("%d 不是素數(shù)",j);
			break;
		}
 }
     if(j==1)
		{
			printf("%d 不是素數(shù)",j);
		
		}
	if((i>sqrt(j)) && (j!=1))
	{
		printf("%d 是素數(shù)",j);
	}
	
	return 0;
}

 因為用到了數(shù)學中開平方的函數(shù),所以引用了多一個庫,這個不做過多講解,大家自行去了解。

當然判斷素數(shù)不知有上述的方法,還可以通過函數(shù)進行實現(xiàn)。

4.第四種方法(函數(shù)實現(xiàn))

具體的代碼思想和第一種方法一樣,不再講解。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h>
int judge(int n)
{
	int i=0;
	for(i=2;i<n;i++)
	{
		if(n%i==0)
		return 0;
	}
	if(n==1)
	{
		return 0;
	}
	return 1;
}
int main()
{
 
	int j=0;
	printf("輸入一個數(shù)"); 
	scanf("%d",&j);
	  if(judge(j)==1)
	  printf("%d 是素數(shù)",j);
	else
	printf("%d 不是素數(shù)",j);
	return 0;	
}

 這種思想和第一種一樣,所以也可以像第二,三種那樣對代碼進行優(yōu)化,這里就不過多講解了(累了累了嘞????)

遇到的問題:我思考了好久,在糾結當輸入1的時候的這種情況應該怎么去調(diào)整代碼,大家能看到我每塊代碼都用了If語句對是不是1進行了判斷,(能力有限????)所以我能想到的方法就是通過 if 語句對輸入的1進行判斷,如果不用這個if語句,那輸入1 的時候結果可能就有問題,但我覺得這樣會不會太麻煩了,但我又想不出來怎么去調(diào)整。

總結

到此這篇關于C語言輸入一個數(shù)判斷是否為素數(shù)的多種方法的文章就介紹到這了,更多相關C語言判斷是否為素數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言自定義實現(xiàn)strlen函數(shù)的3種方法總結

    C語言自定義實現(xiàn)strlen函數(shù)的3種方法總結

    這篇文章帶大家了解C語言中自定義實現(xiàn)strlen函數(shù)的3種方法,計數(shù)器,遞歸以及指針,這三種方法通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • C++進化后的const變量實例探究

    C++進化后的const變量實例探究

    這篇文章主要為大家介紹了C++進化后的const變量實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 深度解析三個常見的C語言內(nèi)存函數(shù)

    深度解析三個常見的C語言內(nèi)存函數(shù)

    這篇文章主要深度解析了三個常見的C語言內(nèi)存函數(shù)memcpy,memmove,memcmp,所以本文將對memcpy,memmove,memcmp 三個函數(shù)進行詳解和模擬實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C++讀取NC數(shù)據(jù)的結果與真實數(shù)值不一致的解決方法

    C++讀取NC數(shù)據(jù)的結果與真實數(shù)值不一致的解決方法

    本文介紹基于C++ 語言的netCDF庫讀取.nc格式的柵格文件時,代碼讀取到的數(shù)據(jù)與柵格文件的實際數(shù)據(jù)不一致的解決方法,文中通過代碼示例和圖文講解的非常詳細,需要的朋友可以參考下
    2024-03-03
  • 常用的C++標準庫頭文件小結

    常用的C++標準庫頭文件小結

    C++標準庫定義了一系列函數(shù)、宏和對象,以實現(xiàn)跨團隊、跨平臺的高效且具有卓越性能的標準化 C++ 代碼, 本文介紹常用的C++標準庫頭文件,需要的朋友可以參考下
    2023-11-11
  • C++超詳細分析順序表

    C++超詳細分析順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關系由它們的存儲順序自然表示
    2022-03-03
  • 簡單說說STL的內(nèi)存管理

    簡單說說STL的內(nèi)存管理

    <STL 源碼剖析>將其描述為空間配置器,理由是allocator可以將其它存儲介質(zhì)(例如硬盤)做為stl 容器的存儲空間。由于內(nèi)存是allocator管理的主要部分,因此,本文以STL內(nèi)存管理為出發(fā)點介紹allocator
    2013-09-09
  • C語言實現(xiàn)xml構造解析器

    C語言實現(xiàn)xml構造解析器

    本文給大家分享的是使用C語言來實現(xiàn)xml構造解析器的方法和代碼,簡單易用,推薦給大家
    2016-07-07
  • C++ OpenCV實戰(zhàn)之網(wǎng)孔檢測的實現(xiàn)

    C++ OpenCV實戰(zhàn)之網(wǎng)孔檢測的實現(xiàn)

    這篇文章主要介紹了如何利用C++和OpenCV實現(xiàn)網(wǎng)孔檢測,文中的示例代碼講解詳細,對我們學習OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-05-05
  • C++?sqlite3數(shù)據(jù)庫配置使用教程

    C++?sqlite3數(shù)據(jù)庫配置使用教程

    SQLite 是一種嵌入式的關系型數(shù)據(jù)庫管理系統(tǒng),它是一個開源項目,已經(jīng)被廣泛應用于各種應用程序和操作系統(tǒng)中,這篇文章主要介紹了C++?sqlite3數(shù)據(jù)庫配置使用,需要的朋友可以參考下
    2023-08-08

最新評論