A. c語言素數
#include <stdio.h>
int main(){
int a=0; // 素數的個數
int num=0; // 輸入的整數
printf("輸入一個整數:");
scanf("%d",&num);
for(int i=2;i<num;i++){
if(num%i==0){
a++; // 素數個數加1
}
}
if(a==0){
printf("%d是素數。 ", num);
}else{
printf("%d不是素數。 ", num);
}
return 0;
}
輸入一個數,自動進行判斷
B. c語言求100以內的質數
以我來看我覺得兩個for循環都有問題。
首先第一個for循環應該錯了。應該是i < 100。因為是求100以內的,所以要循環到100。
這個程序就是利用for循環讓i從2遍歷到99.然後利用j找出了1和本身之外i的因數。
那麼第二個for循環問題就來了,我們尋找i的因數的時候,並不需要從2一直找到i本身,只要找到i的一半就可以停止了。舉個簡單例子,比如我們要找98的因數,那麼我們只需要找到98÷2 = 49就行了,因為49之後的數字是肯定不能整除98的。同理大於i/2之後的數字是肯定不能夠整除i的。所以第二個for的條件應該是j <= (i/2)而不是j。下面就簡單了。如果j是i的因數,那麼i%j=0. 就直接continue(順便提一句這里是不能用break的,因為break是直接跳出了for循環,相當於直接結束了整個for循環,而此時還沒有遍歷到100的,應該用continue,continue就是結束當前循環並且執行i++繼續下一輪循環)繼續循環而不用執行print語句(這個時候代表i不是質數,因為除了1和它本身還有j這個因數。)。同理,如果從2到i/2都沒有i的因數,那麼就說明i沒有其他因數,也就是質數了,所以print輸出i。
另外補充一下:
i/j是求i除以j的商,比如11 / 3 = 3; 6 / 3 = 2
i%j是求i除以j的余,比如11 % 3 = 2; 6 % 3 = 0。
C. c語言 質數
把1<N<1000;去掉,scanf("%d",&N);少了&;你的質數判斷方法也有問題
D. C語言中的質數
數學的概念中,素數就是只能被1和它本身所整除的整數。但是有一個例外,就是1不屬於素數。所以你在輸入一個整數並加以判斷的時候就需要考慮這種情況了。如下即可:
while(scanf("%lu", &num) == 1 && num != 1)
這里用到了while循環來判斷輸入的數值並加以判斷,如果輸入格式正確的話會返回一個1並將輸入的數值存入num這個變數中,然後再判斷num的值是否為1。
在這里有一條很好用的規則用於素數的判斷:測試的數只需要界於2到num的平方根之間的所有數,看它們是否可以整除num。如果可以整除,說明輸入的數不是素數;反之,說明輸入的數是素數。
到這里,就會有人說平方根怎麼求,其實這個很好解決。你完全可以像下面這樣描述判斷條件:
- for(div = 2; (div * div) <= num;div++){ if(num % div == 0){ if((div * div) != num){
- printf("%lu is divisible by %lu and %lu. ", num, div, num / div);
- }else {
- printf("%lu is divisible by %lu. ", num, div);
- }
- }
- }
在這里,在if條件語句裡面還嵌套了一個if條件語句,用來判斷兩個約數是否是一樣的,比如144,約數是12和12,這時候就只需要列印一個約數即可。
E. c語言求質數
有救!有救!
你的思路挺好的,就是編程的時候思路不清晰,沒有周全考慮。
這是改後的代碼
#include
"stdio.h"
#include
"conio.h"
main()
{
int
m,n,i,num;
int
p[100];
long
s;
s=2;
m=1;
n=1;
num=1;
p[1]=2
;
for
(;num<100;num++)/*這里的分號應該是你筆誤吧O(∩_∩)O*/
{for
(i=1,n=2;;)
/*這里n=2而非m估計也是你筆誤?*/
{m=p[i]
;
if
(m>s/2)
break;
else
if(m*n<s)
n++;
else
if(m*n==s)
{s++;i=1;n=2;}/*這里*/
else
if(m*n>s)
{i++;n=2;}/*和這里,仔細想一想,當嘗試一個新的數字或嘗試一個新的質數時,是不是要把計數變數初始化?*/
/*編程的時候不要想當然,要通盤考慮,每個變數是否都做了妥善的處理*/
}
p[num]=s;/*你要用質數表,怎麼能不記錄質數表呢^o^*/
printf
("p%d=%ld\n",num,s);
s++;
}
getch();
}
你的程序運用質數表這點很好,但是你的程序還沒發揮到最高效率。里邊有一些無用的判斷和賦值,而且沒有利用mod運算,使程序既復雜又低效。
我覺得還是用標準的求質數演算法比較好,到處都有,不再說了。
F. C語言素數
是說 有個數, 不能被從2到 他的根的數整除,則這個數是素數
G. C語言計算質數
#include<stdio.h>
staticcharm[8000000];
staticintprime[500000];
#defineMAX_N7368787
voidset(void)
{
inti,j;
for(i=2;i<=MAX_N;i++)
{
if(m[i]==1)continue;
for(j=i+i;j<=MAX_N;j+=i)
m[j]=1;
}
for(i=j=0;i<=MAX_N;i++)
if(m[i]==0)prime[j++]=i;
}
intmain()
{
intm,n,;
while(~scanf("%d%d",&m,&n))
{
for(i=m;i<=n;i++)
{
printf("%d",prime[i-1]);
if(i==n||(i-m)%10==9)putchar(' ');
elseputchar('');
}
}
return0;
}
H. C語言求質數
紅框里的代碼,加上那個i++的for循環,其邏輯是:
從2開始,遍歷所有小於n的整數,
只要存在一個整數可以被n整除(即余數為0),則可判斷n為合數.
若從2到n-1范圍內,不存在可整除n的數,則判斷n為質數.
還有 for(int .......)這種定義變數的寫法,要C99才支持,現在很多編譯器默認C89標准,或者不支持C99標准,這樣寫容易出錯.
第一個for循環裡面,直接把n=0,1,2的情況跳過了.既然這樣,變數n直接把初值賦為3不就好了,賦值0幹嘛.
第二個for循環裡面,判斷到i<sqrt(n)就可以了,還有更簡單的求質數演算法,感興趣可以網路.
I. C語言如何實現質數輸出
通過除以小於被除數的所有數
a%d==0 則count『++;
判斷如果count==0,printf(「%d」,a);
J. c語言求素數的演算法
根據素數的性質,代碼設計如下:
設計一:判斷n是否能被1~n-1整除,不能整除為素數
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for (i = 2; i < n ; i++)
{
if (n%i == 0)
break;
}
if (i < n) printf("This is not a prime.");
else printf("This is a prime.");
return 0;
}
設計二:判斷n是否能被2~√n間的整數整除,不能整除為素數
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
double k;
scanf("%d", &n);
k = sqrt(n);
for (i = 2; i <= k;i++)
{
if (n%i == 0) break;
}
if (i <=k) printf("This is not a prime.");
else printf("This is a prime");
return 0;
}
(10)c語言質數擴展閱讀:
1.素數的定義是只能被1和他本身整除,1不是素數.因此要判斷一個數是否為素數.就要判斷它能不能被比他小的所有素數整除,這是一個演算法.(寫到演算法時,我只能寫出用它除以比他小的所有數,造成運算速度低下)
2.如果一個質數大於根號n,而n可以除盡它,那麼n必然也可以除盡一個更小的質數。由此可以得到一個法2較快的素數判斷演算法