當前位置:首頁 » 編程語言 » c語言求質數用for循環
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言求質數用for循環

發布時間: 2022-11-05 22:22:59

c語言,怎樣判斷一個數是否是質數,用循環語句拜託

#include<stdio.h>
#include<math.h>
intcheck(intn)
{
inti,k=1;
floatm=sqrt((float)n);
for(i=2;i<=(int)m;i++)
if(n%i==0){k=0;break;}
returnk;
}
intmain()
{
intn,j;
printf_s("請輸入一個正整數:");
scanf_s("%d",&n);
j=check(n);
if(j==0)
printf_s(" %d不是素數。 ",n);
else
printf_s(" %d是素數。 ",n);
system("pause");
return0;
}

Ⅱ C語言中用for循環程序編寫: 輸入一個數判斷它是否是質數

#include"stdio.h"
intmain()
{
intn,i,flag=0;
scanf("%d",&n);
if(n<=1)
{
printf("輸入的數不是質數! ");
return0;
}
for(i=2;i<=n/2;i++)
{
if(n%i==0)
{
flag=1;
break;
}
}
if(flag==1)
printf("輸入的數不是質數! ");
else
printf("輸入的數是質數! ");
return0;
}

Ⅲ C語言判斷質數,for語句里一個條件看不懂

看到提問者,遲遲沒有採納別人的答案,我就來答一下,因為其他人雖然說了,但是樓主可能沒有明白是為什麼。。。我專門詳細的給你講解一下吧。。。
首先,直接寫i<n,是可以的,但是效率太低。假設,我輸入的數n是100,那麼顯而易見,for循環需要做一百次,貌似沒差哦,因為電腦的運行速度是很快的,可能幾秒鍾就做完100次for循環了。但是要是我輸入的100000,十萬呢?那麼意味著,需要做10萬次for循環,這個時候,計算機可能需要幾十秒,感覺還是很快是吧,不差那幾十秒對吧,那我們如果輸入更大的數,10億呢?可能就需要一分鍾了,因為計算機雖然算的快,但是不意味著瞬間就能完成啊。所以那怎麼辦呢?我們需要對程序進行優化,即採用演算法,從而提高效率和運行速度,這就是計算機專業的基本課程要求了,我就不細講了。主要講一下,這個程序,為什麼要這么做。
首先,我知道,我們需要提高for循環的效率,從而盡可能的讓for循環的次數少,從而減少時間,提高運行效率,那麼我們應該怎麼提高呢。假設,我們現在還輸入數n為100,i<n,需要100次,那麼我需要減少運行次數,所以我們需要先分析一下,怎麼減少,比如i<n,當n=100的時候,我們需要100次,提高效率,那麼我就要把上限n減小。當我輸入n=100,是先從i=2開始做的對吧,這個時候100/2,結果是50對吧,那麼請問50以上的數我還需要做嗎?沒必要對吧,因為100/60,結果已經小於2了,而我們的i是從2開始一直往上加的正整數,50以上的數明顯小於2,做第一遍的時候,不符合,那麼50上面的數一定不符合了啊對吧,這個時候,我們就可以寫for(i=2;i<n/2;i++),這樣效率就提高一半了,原來要從2做到100,現在只要做到50,而且我們也已經知道了,為什麼50以上的數不需要做了,效率提高了將近一半,但是效率依然可以繼續提高,就像你那個程序一樣,那麼當i=3的時候呢?100/3=33.33,取整就是33,就算向上取整,也才34,那麼意味著,如果這個數能被3整除,那麼34-100的數就不需要去做了,因為如果能被3整數,那麼33以上的數肯定有一個能被整除,而3都不能整除的話,那麼34以上的數一定找不到能被整除的數了,所以我們會發現i每次增加1了之後,我們要尋找的數的上線就被降低了,根本不需要做到這個數為止,那麼極限數是什麼呢?很簡單,當i增大了,我們的上線就減少了,最後的上限的極限在哪裡呢?上限的極限就在100/i=i,為啥呢?因為i的平方數等於100,也就是意味著i*i=100,如果能被整除,那麼i就是唯一的整除的數,如果i不是,那麼就一定沒有,因為i如果繼續增加,那麼另外一個能被整除的數一定小於i,但是小於i的正整數,我們已經全部做過了啊。所以當i*i=100,都沒有結果的時候,根本不需要再往上做了,如果在小於i的范圍內,有一個數能被整除,那麼這個數是質數還是素數,我們就已經很清楚了吧,就不需要再去做了,除非你的程序,是要把所有能被整除的數都找出來。
所以,其實那隻是一個演算法而已,目的,只是在於提高效率。而i<n可以,但是效率略低,而且當輸入的數越大,效率越低,找出答案的時間越長,不信你可以輸入一個超級大的數,黑框的控制台,就不會馬上出結果,超級大的數,你甚至還會以為程序卡主了,其實是程序沒做完而已。。。沒巴拉演算法之前,我寫程序也是暴力群舉的,簡單小程序,確實夠用了,大程序,是行不通的,一定是需要演算法輔助的。。。
我說了這么多,應該已經比他們詳細明了了吧,自己去算算,就知道了,要盡可能的把上限縮小,如果只是初學者,不用關心這個,先把C語言的程序語法,標准語句搞清楚,會用,沒有BUG就行了。。。

Ⅳ c語言關於用for循環求素數

#include#include
main()
{
int i,j;
for(i=2;i<100;i++ ) {
for (j=2;j<=(i/2);j++)
if (i%j==0) break;
if (i%j!=0) printf("%d\t",i);
}
printf("\n");
}

#include#include
main()
{
int i,j;
for(i=2;i<100;i++ ) {
for (j=2;j<=(i/2);j++) {
if (i%j==0) break;
if (i%j!=0) printf("%d\t",i);
}
}
printf("\n");
}

這倆根本不是一回事啊= =沒加那對大括弧,第二句if就是大循環裡面的,加了以後就是小循環裡面的了。
第一個程序,小循環:
for (j=2;j<=(i/2);j++)
if (i%j==0) break;
意思是說,從2一直到i/2,但凡出現能整除的就跳出小循環,否則就一直循環到i/2為止

Ⅳ 求大神,c語言怎麼用for循環語句輸出1到100的所有質數,我這么做結果出來的是2到100的所有數

for(a=2;a<=100;a++)
{
for(i=2,t=0;i<a;i++)
{
if(a%i==0)
{
t=1;
break;
}
}
if(t==0)
{
cout<<a<<"";
}
}

Ⅵ c語言 質數 循環

#include<stdio.h>
main()
{
intnumber;
intdivisor;
printf("2 ");//最小的質數是2
for(number=3;number<=100;number=number+2)
{
for(divisor=3;divisor<number;divisor=divisor+2)
{
if(number%divisor==0)//表示number有因數,提前結束本次循環,這時divisor會小於number
break;
}
if(divisor>=number)//如果不是質數,divisor會小於number,因此,判斷不小於number就可以知道是不是質數了。
printf("%d ",number);
}
}

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

Ⅷ c語言求素數的辦法只需解題思路

/*求素數的三種方法
一:for(i=2;i<=(n-1);i++)
if(n%i==0)i在2到n-1之間任取一個數,如果n能被整除則不是素數,否則就是素數
二:for(i=2;i<n/2;i++)
if(n%i==0) /*i在2到n/2之間任取一個數,如果n能被整除則不是素數,否則就是素數

三:for(i=2;i<(n=sqrt(n));i++)
if(n%i==0) /*i在2到sqrt(n)之間任取一個數,如果n能被整除則不是素數,否則就是素數,在下省了下面的輸出步驟*/

/*在本程序中使用第三種方法來求解*/
#include <stdio.h>
#include <math.h>
int main(void)
{
int i; /*外循環*/
int j; /*內循環*/
int flag; /*素數標志,flag為1則此數為素數*/
flag = 0;
//int n;
i = 2;
while( i <= 100)
{
j = 2;
flag = 1; /*假設此數為素數*/
while(j <= (int) sqrt(float(i)))
{
if(0 == (i %j))
flag = 0; /*根據第三種演算法可知次數不為素數*/
j ++;
}
if(flag)
printf("%d\t",i);
i++;
}
printf("\n");
return 0;
}

Ⅸ C語言for循環判斷素數

質數又稱素數。指在一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。換句話說,只有兩個正因數(1和自己)的自然數即為素數。比1大但不是素數的數稱為合數。1和0既非素數也非合數。
假設循環為for
(i=2;i<=x;i++)如果輸入x=7,i=2,2<7,然後i+1為3,之後一直執行到i=7,
7<=7可以執行,i7%7==0直接執行break退出循環,執行下一句,此時i不再加一(已退出循環),所以i<=x這樣也是可以的。當然如果是for
(i=2;i<=x-1;i++)也是可以的,這個就不解釋了。
之所以用i
<=x-1,因為這是一般人的想法,比較通俗易懂。i<=x這個就不好想了

Ⅹ 嵌套for語句求質數

兩個for循環,最外層的for循環,指定i的值
然後這個i的值確定後,就開始執行裡面的for循環,
裡面的這個for循環,指定j的值。
在變更j的值的過程中,用if語句來判斷是否滿足整除性。