如何編寫查詢素數的函式,如何用數學方法判斷素數

2025-05-10 22:12:37 字數 1788 閱讀 7395

1樓:匿名使用者

for(j=2;jif(i%j!=0)

a[n++]i;

這個地方有問題。

比如i=9j=2時。

i%j!=0就真了,就當成了素數。

改法可以多拿攜加個判斷標誌變數慧銀c,j=2到i-1後看有沒有整除過就好前敏宴了。

void fun(int m,int *k,int a)int i,j,t,n=0,c;

for(c=1,i=2;ifor(j=2;jif(i%j==0)

c=0;if(c==1)

a[n++]i;

k=n;

如何用數學方法判斷素數

2樓:華源網路

方法。一、用試除法判斷乙個自然數。

a是不是素數。

時,用各個素數從小到大依次去除a,如果到某乙個素數正好整除,這個a就可以斷定不是素數;如果不能整除,當不完全商又小於這個素數時,就不必再繼續試除,可以斷定a必然是素數.

方法。二、只要找出x為乙個奇數和乙個偶數平方差。

的形式(這閉旅是一定的)便可以a2-b2=(a+b)(a-b)便是兩個因數。

例如26341,先找出比26341大的乙個偶平方數。

26896,與它的差是555,肯定不是平方數,再下一飢寬個平方數(其實考慮到(x+1)^2=x2+2x+1,因此直接將原數加上2x+1就行了,用不著算x+1的平方),27556, 差1215,也不是,然後28224個位與1的差為3,直接排除,下乙個2559也不是(一看就知道它等於50^2+59).再下個差為3直接排出,再下個、再再下個……找出規律來就很快了,最後爛態亮221^2=48841,48841-26341=22500,很明顯22500=150^2,就分解出來了26341=71×371

怎樣求素數的判斷

3樓:x狄仁傑

一、查《素數表》,看已知數是否為素數;弊明洞。

二、計算租枯已知數a的平方根√a,分別用不超過√a的各個素數槐哪去試除a,如果所有不大於√a的素數都不能整除a,則a為素數;否則為合數。

例如,判斷1867是否是素數,先算√1867≈,然後分別計算1867除以等素數,都除不盡,則1867為素數。當然,1867不能被整除是很容易判定的。

4樓:網友

質數又稱素數。指在乙個大於1的自然數中,除了1和此整數自身外,沒法被其他培逗自然數整除的數。如13,只能被1和13整除。

所以要判斷a是否是素數,只要判斷a能否被2到a-1之間的數整除,如果能則說明a能被1和a之外的數整除,即a不是素數;如果不能則說明a只能被1和a整除,即a是素數。

但是這樣的判斷方法做了很多無用功,假設b能整除a,c為商(即配指賣a=b*c)。則b和c的大少關係有兩種:一種b,c中一大一小(又a=√a*√a,所以b,c中乙個大於√a乙個數小於√a),另一種b=c(此時,√a=b=c)。

故如果a能被大於√a的數整除則一定存在乙個小於√a的數能整除a。所以只要判斷2到√a的整數是否能整除a就行了。

例如逗拿求1000以內的素數:

#include

#include

void main()

int i,a,b;

for(a=2;a<=1000;a++)

b=sqrt(a);/求a的平方根。

for(i=2;i<=b;i++)

if(a%i==0)

break;

if(i>b)//如果i>sqrt(a)則說明2到sqrt(a)之間沒有數可以整除a,故a為素數。

printf("%4d",a);

如何用C 寫關於判斷數是否為素數的程式

include iostream include math h usingnamespacestd boolisprime intnumber for int i 2 i i number i if number i 0 return false return true void printnum ...

如何用vb編寫程式判斷數是完全平方數

思路 1 判斷值是否copy大於等於0 2 開平方這個數 3 判斷開平方後取整和開平方後的數是否相等,如果相等是完全平方數,否則不是 例子 dim a,b for a 1 to 100 if a 0 then b sqr a if int b b then 完全平方數 else 不是完全平方數 en...

如何用函式顯示C列內容,如何用函式顯示C列內容

在第一個格子輸入以下 substitute b1,a1,就可以刪除a列的資料 然後你的輸出順序,需要研究一下細節 如果只是判斷 a列與c列的值是否相同 可以使用if函式 r n也可配合 條件格式 進行資料突顯 r n至於你說的 對齊 我就不明白了.先將這些數放到一個二維陣列裡,用一個迴圈,控制列不變...