A. 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。

B. C語言求質數問題

#include<stdio.h>

#include<math.h>

intmain()

{

intm,n,c=0,i,t,j;

scanf("%d%d",&m,&n);

if(m==0&&n==0)//<===========

{

return0;

}

elseif(m>n)

{

t=m,m=n,n=t;

}

//else

for(i=m;i<=n;i++)

{

for(j=2;j*j<=i;j++)//<============

{

if(i%j==0)

break;

}
if(j*j>i)//<==========

{

printf("%d",i);

c++;

if(c==10)
{

printf(" ");

c=0;
}

}

}



return0;

}

C. 求素數的C語言程序!

素數,也叫質數,就是指除了1和該數本身以外,不能被其他任何整數整除的正數。

#include<stdio.h>#include<math.h>voidmain(){intm,k,i,n=0;for(m=1;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf("%5d",m);n=n+1;

D. 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;

}

(4)求質數c語言擴展閱讀:

1.素數的定義是只能被1和他本身整除,1不是素數.因此要判斷一個數是否為素數.就要判斷它能不能被比他小的所有素數整除,這是一個演算法.(寫到演算法時,我只能寫出用它除以比他小的所有數,造成運算速度低下)

2.如果一個質數大於根號n,而n可以除盡它,那麼n必然也可以除盡一個更小的質數。由此可以得到一個法2較快的素數判斷演算法

E. 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)就可以了,還有更簡單的求質數演算法,感興趣可以網路.

F. 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運算,使程序既復雜又低效。
我覺得還是用標準的求質數演算法比較好,到處都有,不再說了。

G. 用C語言編寫求質數的程序

//我分別寫出了求素數和判斷素數的程序
/*
//判斷一個數是否為素數
#include<stdio.h>
#include<math.h>

int isprime(int);
void main()
{
int inumber;

printf("請輸入一個非負整數: ");
scanf("%d",&inumber);
if(isprime(inumber))
printf("%d是素數!\n",inumber);
else
printf("%d不是素數!\n",inumber);
}
int isprime(int a)
{
int i;
for(i=2;i<=sqrt(a);i++)
if(a%i==0)
return 0;
return 1;
}
*/
/*****************************************************/

//求某個正整數以內的素數
#include"stdio.h"
#include"math.h"
int main(void)
{
int count,i,m,n,num;
printf("請輸入所求范圍(正整數): ");
scanf("%d",&num);
count=0;//count記錄素數的個數
printf("%d以內的素數為:\n",num);
for(m=2;m<=num;m++)
{
n=sqrt(m);
for(i=2;i<=n;i++)
{
if(m%i==0)
break;
}
if(i>n)//如果m是素數
{
printf("%6d",m);
count++;
if(count%10==0)//count為10的倍數時換行
printf("\n");
}
}
printf("\n");

return 0;
}

H. C語言求素數代碼

請你把if(r=0)
改為r==0

I. c語言中如何求素數

樓上的還可以具體一些,其實非常簡單,如果一個數是素數,只要判斷他是版否能被2到這個數的開方之間的數權整除就行了。
int flag=0;

if(m==2){ //先判斷是不是2
flag=1;
}

else{
for(int i=2;i<=sqrt(m);i++){
flag=1;
if(m%i==0){ //不是素數
flag=0;
break;
}
}
}

return (flag==1)?m:-1; //判斷是否為1,為1輸出m,否則輸出-1 ,-1表示不是素數

如果是求某個范圍的素數,可以連續調用這個方法,上面是常規的方法,還有更好的方法自己去查一下。