-
雖然你說不要考慮時間和精力等,但我還是和藹地說,我覺得這個程式最好是用PHP寫的。 我曾經用PHP編寫過乙個程式來確定質數,由於它是在伺服器上執行的,因此它比我在計算機上使用VB要快很多倍。
我不明白c,這是我從大師的空間裡複製的。
int map[n + 1] = ;
for (i = 2; i < n; i++)if (map[ i ] == 0)
for (j = i * 2; j < n; j += i)map[ i ] = 1;
printf("%d 是質數", i);
以下是他的工作方式:
首先找到一張紙,寫下從2-n開始的所有數字,從頭開始,如果數字沒有被劃掉,則劃掉它的所有除數,現在假設n=15在列中。
如果 2 沒有從一開始就被劃掉,它的所有倍數都會被劃掉,這樣就剩下序列了。
2 的篩選結束了,當我開始看到仍然存在的第二個數字是 3 時,我劃掉了所有 3 的倍數,剩下的數字列為:
然後繼續到最後,你會發現剩下的數字最後都是素數。
-
我不會寫程式。 乙個不考慮時間複雜性的程式。 尤其是這種大數字。 這沒什麼意思...... 如果你沒有程式基礎。 你可能不明白我在說什麼。
首先,如何判斷乙個大數是否是質數? 直接判斷沒有通用的公式。 而且它只能從2-n使用。
乙個接乙個地判斷...... 這是為了準確確定乙個數字是否是質數。 但是當它是乙個大問題時。
光是判斷乙個數字就需要很多迴圈,而且區間裡有很多數字。 那麼這種方法肯定不夠有效。
六樓的報價方法。 有乙個缺點。 該演算法僅適用於判斷小數間隔。 它不能是對大數字的判斷。 因為大數的陣列。 它很大。 空間的複雜性太大了。
那麼如何改進這種方法呢? 從而提高效率。
我的想法是分級過濾。 最後,使用第一步中的演算法來測試無法過濾的數字。
假設區間 [a,b] 是我們的大數區間...... 總共有 n 個數字。
迴圈。 n 次。 過濾掉偶數,因為它們可以被 2 整除。 也就是說,還剩下 n 個 2。
迴圈,步長為 2,剩餘的 n 個 2 個數字逐個除以 3看看是不是可整除的,過濾掉可整除的3。。
迴圈,以步驟為單位? ,剩餘的數字。 除以 5... 過濾器 5.
最後一步。 使用最開始的方法。 經過測試和過濾後無法判斷的數字... 還是找不到可整除數。。那是最主要的......
該演算法的一般流程如下。 因為有最終過濾標準方法的最後一步。 所以。 100%準確篩選... 如果房東還是不太了解。。你能給我留言嗎...
-
以下過程可以過濾掉 [a,b] 區間內的所有素數。
#include
#include
int isss( int num)
int i;
for(i=2;i<=sqrt(num);i++)if(num%i==0)return 0;
return 1;
void main()
int a,b;A 和 B 是區間的左右兩側。
int i,count=0;count 用於計算素數的數量。
printf("請輸入該部分的左側和右側");
scanf("%d%d",&a,&b);
if(a>=b) 區間的右側必須大於左側。
printf("輸入有誤! ");
return;
for(i=a;i<=b;i++)
if(isss(i))
count++;
printf("%d ",i);
if(!count)
printf("這個區間內沒有質數! ");
-
以下是這個節目的**,希望看完後能記住。
#include
#include
void main()
int k,i,p,q,m,n=0;
printf("請給出下限 p 和上限 q:");
scanf("%d,%d",&p,&q);
for(m=p+1;m<=q;m=m+2)k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
printf("%3d",m);
-
#include
void main()
int i,j;
printf("1 n 以內的質數:");
for(i=1;i<=n;i++)
for(j=2;j<=i/2;j++)
if(i%j==0)
break;
if(j>i/2)
printf("%d\t",i);
ps:執行時給 n 分配乙個明文值!!
-
好吧,我給你一些提示,這些大素數,用隨機演算法,你可以自己搜尋拉賓-公尺勒素數演算法,在“演算法導論”的理由中,如果你想找**,網上有很多,你自己找。 給你這個關鍵詞就足夠了。
-
對那位邢同學來說,如果 p 是奇數,你的程式就沒有掛了!
-
1. 編寫我們的標頭檔案和 main 函式。 寫下我們的開始。
2. 編寫乙個定義變數,並用我們的語言定義乙個 i,用於以下 for 迴圈。
3. 讓我們輸入乙個數字,在此之前,我們需要有乙個 printf() 提示。
4. 使用 for 迴圈檢視是否可以從 2 到 n-1 被 n 整除,如果空腔粗糙,則斷開。
5.判斷素數,如果程式正常結束,i = n,表示他是素數。
6.如果它以休息結束,他會<>
7. 輸出最終結果。 早大便。
-
我們先解釋一下篩選方法的步驟: <1>先挖出1(因為1不是素數)。 <2> 用 2 去掉後面的數字,挖出能被 2 整除的數字,即挖出 2 的倍數。
3>用3去掉後面的數字,挖出3的倍數。 <4>使用....這些數字用作除數,以從這些數字中刪除數字。 上述操作需要乙個大容器來載入所有數字的集合,只要滿足上述條件,即全部到 2 的 n 次方到 0,3 到 n 次方為 0,4 到 n 次方為 0。
直到這個資料集的末尾,使不為0的數字是質數,然後按標記找到它,在過濾過程中的步驟如下 如果你覺得這個方法不好理解,你可以用他們上面寫的常規演算法,但是如果數字太大, 計算速度非常慢。
-
首先標記 2 的倍數,然後標記 3 的倍數。 之後,依次標記陣列中未標記數字的倍數,直到遍歷整個陣列,然後完成。 陣列中未標記的是質數。 這裡的乘數是從 2 開始的整數倍數!
#include ""
#include
using namespace std;
#define n 1001
void main(void)
-
1. 編寫我們的標頭檔案和 main 函式。 寫下我們的開始。
2. 編寫乙個定義變數,並用我們的語言定義乙個 i 以用於後續的 for 迴圈。
3. 輸入乙個數字,在此之前,我們需要有乙個 printf() 提示,它使程式看起來是有條件的。
4. 使用 for 迴圈檢視它是否能被 n 從 2 整除到 n-1,如果可以,則中斷。
5.判斷素數,如果程式正常結束,i = n,表示他是素數。
-
篩選法的定律:(以1 1000中的素數為例)我們知道素數的定義:它是乙個素數,只能被1和它本身整除,所以如果你這樣看,只要有乙個既不是1也不是數字本身並除以這個數字的數, 可以說,這個數字不是質數。
例如,5 是素數,因為 5 只能被 5 和 1 整除,而 6 不是素數,因為 6 除了能被 1 和 6 整除外,還可以被 2 和 3 整除。 試想一下,我們要判斷6是不是質數,我們是否需要迴圈到6來判斷它,不,因為2和3是他的因數,當我們迴圈到2時,我們發現2的所有倍數,比如4、6、8、10、12等,這些數字至少有2個這個因數, 因此,我們可以判斷它們不是素數。而且由於 4 是 2 的倍數,所以當迴圈達到 2 時,已經確定 4 不是質數,所以我們不需要挖出 4 的倍數,只需跳過 4,來到 5,挖出 5 的所有倍數,然後 6、6 以 2 的倍數挖出來, 所以跳過 6 並來到 7....
迴圈到最後乙個數字,也就是上面7個步驟所說的,剩下的沒挖出來的數字(挖出來的意思就是把這個數字設定為0),也就是不是0的數字就是質數。
我不知道你是否能理解我在說什麼。 希望對你有所幫助。
#include
int main()
for(i=1;i<1000;i++)
if(prime[i]!=0)
printf("%d ",prime[i]);最後乙個非 0 數字輸出返回 0; }
-
質數。 大於 1 的自然數不能被除 1 和 100 整數本身之外的任何其他自然數整除的次數。 素數在數論中起著重要作用。
大於 1 但沒有素數通道的數字稱為合數。 1 和 0 既不是素數也不是復合數。
通過濾波得到的100以內的素數來源如下:
include"stdio.h"
main()
main()
inti,j。
對於 (i = 2; 我< 99 歲; I++
對於 (j = 2; I++j +
if(i%j==0)
破; 如果 (j i 1)。
printf(“%4d”,i);
-
總結。 您好,親愛的,使用過濾方法查詢 100 以內的質數。
篩選方法介紹。
首先,將 n 個自然數按順序排列。 1 不是質數,也不是合數,劃掉。 第二個數字 2 作為質數保留,2 之後所有能被 2 整除的數字都被劃掉。 2.後面的第乙個不是。
劃掉的數字是 3,留下 3,然後劃掉 3 後面所有能被 3 整除的數字。 3 後第乙個未交叉的數字是 5,留下 5,然後劃掉 5 後所有可被 5 整除的數字。 如果繼續這樣做,您將過濾掉所有不超過 n 的合數,留下所有不超過 n 的質數。
這實際上是乙個非常粗糙的解決方案,將質數一一除以!
程式流程。 * 將 n 個自然數寫入陣列,1 劃掉(設定為 0)。
所有在 2 後可被 2 整除的數字都被劃掉(設定為 0)。
設 2 之後的第乙個非零數是設定為 n 的第二個質數,並劃掉 n 之後所有可被 n 整除的數字。
等等。 在 C 語言中,使用過濾器方法查詢 100 以內的素數? 我以各種方式要求它,請附上流程圖,謝謝。
這個問題由我來決定,打字需要一點時間,所以請耐心等待。
您好,親愛的,使用篩選方法查詢 100 以內的素數 篩選方法介紹 首先按順序排列 n 個自然數。 1 不是質數,也不是合數,劃掉。 第二個數字 2 作為質數保留,2 之後所有能被 2 整除的數字都被劃掉。
2 之後未劃掉的第乙個數字是 3,留下 3,然後劃掉 3 後所有可被 3 整除的數字。 3 後第乙個未交叉的數字是 5,留下 5,然後劃掉 5 後所有可被 5 整除的數字。 如果繼續這樣做,您將過濾掉所有不超過 n 的合數,留下所有不超過 n 的質數。
這實際上是乙個非常粗糙的解決方案,將質數一一除以! 程式流程*將n個自然數寫入陣列,劃掉(設定為0)*所有在1之後可以被2整除的數字,劃掉(設定為0)*讓2之後的第乙個非0數字成為設定為n的第二個質數,劃掉所有在n之後可以被n整除的數字,劃掉*,依此類推。
這是乙個 C 程式。 如果你想要乙個C++程式,我可以改變它。 #include >>>More
如果只有乙個搜尋條件,則按產品名稱。
欄位為 txtname,表名為 tablename,框名為 txtname。 >>>More