用篩選法求100之內的素數,有陣列名的問題

2022-02-26 12:28:59 字數 4988 閱讀 9072

1樓:匿名使用者

不知這個程式清單您是從**看來的?

您說的這一個問題,顯然是原程式的筆誤了。或者原來定義就該定成a[101],或者這裡的<=100應該改成<100,否則,陣列超界了。

另外,這個程式編的相當糟糕,名為「篩法」,實際上「篩法」的優點全都沒有體現。程式結構中大量「多此一舉」的操作。

篩法的主要優點是不需要反覆順序一個一個挨著判斷,而這裡的迴圈是j++,依然是每次加1,挨著判斷;

篩法的另一個優點是不需要做除法,而這裡依然是挨著做除法。

本來,求一個數的「倍數」,只需要做乘法,甚至乘法也不必要,依次做加法即可。但這裡卻將所有的數都挨個用「嘗試法」來除一除,看是不是它的倍數,用一句雖然難聽但卻切中要害的話來評價:「脫褲子放屁多此一舉」。

如此,在「篩法」中新增了大量「多此一舉」的操作後,其效率絲毫不比最笨的「嘗試法」高,還有什麼意義呢?

我把這一段程式改一下您看如何:

#include

#include

int main()

2樓:匿名使用者

a[100]裡面有101個數 a[0]~a[100]

而不是100個數

用篩選法求100之內素數

3樓:_葉子妞妞

首先 你這個並不是篩選法

其次 按照你的** 並沒有用到所謂的a[i]所以 連同上面的

for (i = 1; i <= 100; i++)一起註釋掉就好

c語言問題:用篩選法求100之內的素數。(利用陣列。)

4樓:呆死了

/*素數是隻能被1和本身整除的數,1除外

*/#include

// 用maxnumber表示100,方便以後程式的修改

#define maxnumber 100

void getprime();

int main()

void getprime()

// 從2開始到startnumber結束,用startnumber去對i求模

// 如果startnumber%i==0 表示startnumber不是素數,因為它能被i整除

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

}// 跳出for迴圈後判斷這個數是不是素數

// 如果i>=startnumber表示這個for迴圈不是通過break跳出的

// 而是執行到i=startnumber,即i= startnumber)

}printf("\n");}/*

求素數有很多方法,這個只是入門級別的方法。*/

c語言程式設計:用篩選法求100之內的素數,

5樓:小夏在深圳

源**如下:

#include

#include

int main()

int a, b, i, flag;

printf("輸入兩個整數: ");

scanf("%d %d", &a, &b);

printf("%d與%d之間的素數為: ", a, b);

while(aflag=0;

for(i=2; i<=sqrt(a); i++)if(a%i==0)

flag=1;

break;

if(flag==0)

printf("%d ", a);

a++;

return 0;

}擴充套件資料一個偶數總能表示為兩個素數之和的源**如下:

#include "stdio.h"

#include "math.h"

main()

int a,b,c,d;

scanf("%d",&a);

for(b=3;b<=a/2;b+=2)

for(c=2;c<=sqrt(b);c++)if(b%c==0) break;

if(c>sqrt(b))

d=a-b;

else

break;

for(c=2;c<=sqrt(d);c++)if(d%c==0)

break;

if(c>sqrt(d))

printf("%d=%d+%d\n",a,b,d);

for(int i=5;i<=sqrt(x);i+=6)if(x%i==0||x%(i+2)==0)printf("%d不是素數",x);

return 0;

printf("%d是素數",x);

return 0;}

6樓:匿名使用者

樓主你好!

你這樣寫的,會把1也認為是prime number。根據定義,1不是素數。2才是最小的素數!還把2是素數給漏掉!

for(m=1;m<=100;m=m+2)這裡應該為for(m=2;m<=100;m++)

在for()迴圈之前應該說明m=1時,不是素數!

希望我的回答對你有幫助!

7樓:匿名使用者

你這個是譚浩強c裡的習題吧,我直接給我的**給你,自己比對一下找找錯誤,

#include

#include

void main()

}for(i=1,j=0;i<1001;i++)if(j==8)

}printf("\n");

}樓下篩法原理講的差不多了,但有一條沒講,就是篩法只要迴圈到sqrt(n)就可以了,至於為什麼自己可以想一下。

c語言程式設計題:用篩選法求100以內的素數

8樓:小夏在深圳

素數。在一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。素數在數論中有著很重要的地位。比1大但不是素數的數稱為合數。1和0既非素數也非合數。

用篩選法求100以內的素數的源**如下

#include "stdio.h"

#include "stdlib.h"

main()

int i,j;

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

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

break;

if(j==i-1)

printf("%4d",i);

擴充套件資料求100以內的巧數的源**如下

#include

using namespace std;

int sum(int n)

return (n/10%10+n%10)+((n/10%10)*(n%10));

int main()

9樓:1024程式設計師

c語言經典例子之求100之內的素數

10樓:匿名使用者

方法一:

說明:從1至100放入陣列,將非素數置為0;

n用來控制輸出,每行輸出五個;

# include

# include

void main()

}for(i=1;i<=100;i++)

if(n%5==0)

printf("\n");}}

方法二:

說明:此方法是將2至100間各數的倍數置為0,則所剩的自然就是素數了;

# include

# include

void main()

}for(i=1;i<=100;i++)

if(n%5==0)

printf("\n");

}方法三:

說明:用goto語句實現;

# include

# include

void main()

printf("%d ",i);

n++;

if(n%5==0) printf("\n");

ab: i++;}}

方法四:

說明:用break;語句實現;

# include

void main()

if(j>sqrt(i))

if(n%5==0)

printf("\n");}}

11樓:

#include

#include

int main()

if (m%50==0)

printf("\n");

}return 0;}

12樓:匿名使用者

#include

#include

void main()

for (t=0;t<100;t++)

printf("%d",t[t]);}

13樓:

7,8句先對定義陣列中所有元素賦值為1;第九句是遍歷所有的數,使用了篩分法;其中巢狀了一個迴圈(12,13句)只要序號是已知質數的倍數該陣列元素都被賦值為0;該迴圈外面是一個判斷語句(10句)只要下標是質數都會進入迴圈判斷中。最後輸出的是陣列的下標,只要陣列元素值仍然為1就說明其下標不是任何一個素數的倍數,那麼它就是一個素數。

用c語言篩選法求100以內的素數

14樓:

先建立一個陣列賦值為2-100

再用二重迴圈標記每個素數的倍數為0,最後列印出為被標記不為0的數即為素數

#include "stdio.h"

#define size 99

int main()

int a[size],i,j;

for(i=0;ia[i]=i+2;

for(i=0;iif(a[i])

for(j=i+1;jif(a[j]%a[i]==0)a[j]=0;

for(i=0;iif(a[i]!=0)

printf("%d\t",a[i]);

printf("\n");

return 0;結果

用c 編寫求1000以內的素數及所有素數的個數

include int main cout 3 for int i 2 i n 2 i if n i 0 break if i 1 n 2 cout 判斷素數,是學習c c 必接觸的一個演算法。answerintheinternet.cpp 定義控制檯應用程式的入口點。include stdafx....

用支路電流法求圖1811中的I和U

12 6 i 2 3 i 9 i 24 i 8 3 2.67a 我不會蹭個金幣謝謝笑哭 這就是這道題的計算方法 這應該是大學類比電路的例題吧,根據課本上的分析來就行,按部就班地做 我也不會,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 為什麼串聯電路中各部分電路兩端電壓與其電阻成反比 理工學科 電流i...

求小數的近似數可以用什麼法,求一個小數的近似數可以用什麼法

求一個小數的近似抄 數可以用四捨五入法 進一法和去尾法。1.四捨五入法 在取小數近似數的時候,如果尾數的最高位數字是4或者比4小,就把尾數去掉。如果尾數的最高位數是5或者比5大,就把尾數捨去並且在它的前一位進 1 這種取近似數的方法叫做四捨五入法。例如 將數字2.1875精確保留到千分位 小數點後第...