當前位置:首頁 » 編程語言 » 初等c語言判斷素數個數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

初等c語言判斷素數個數

發布時間: 2023-08-18 05:52:02

c語言判斷素數

根據初等數論,一個整數不能整除他的平方數之內的整數就是素數..
#include<stdio.h>
#include<math.h>
main(){
int
n,j,sum=0;
for(n=3;n<=300000;n+=2){
for(j=2;j<=sqrt(n)-1;j++){
if((n%j)==0)
break;
}
if(j>sqrt(n)-1){
printf("%d,
",n);
sum=sum+1;
}
}
printf("\
sum=%d\
",sum);
}
這個程序是找出3到300000內的所有素數...也可以根據你的范圍修改程序上面程序中300000的值!值的一提的是這個程序運行的時間5秒左右,因為利用了初等數論和篩選法......直接把偶數(大於3)去掉不做判斷..如果用窮舉法(舉個例:300000中最大的素數為299993,運行到這個數時是將299993從2開始除一直到299992才判斷結束!這就說就是這一個數就做了判斷299992次判斷.而300000內的素數有26121個..)程序運行時間要2分多鍾!!!!我在本機上測試過..可見程序的演算法是多麼重要..

⑵ 怎麼用c語言判斷一個數是不是素數

方法一:

#include<stdio.h>

int main(){

int i,j;

printf("請輸入一個正整數。\n");

scanf("%d",&i);

if(i<2)

printf("小於2,請重新輸入。\n");

elseif(i%2==0)

printf("%d不是一個素數。\n",i);

else{

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

if(i%j==0){

printf("%d不是一個素數。\n",i);

break;

if(j>i/2){

printf("%d是一個素數。\n",i);

break;

方法二:

#include<stdio.h>

int main(){

int a=0;

int num=0;

scanf("%d",&num);

for(inti=2;i<num-1;i++){

if(num%i==0){

a++;

if(a==0){

printf("YES\n");

}else{

printf("NO\n");

方法三:

#include"stdio.h"

int main(){

printf("\t\t\t\t\thelloworld\n");

int a,i;

do{

printf("inputnumberjudgeprimenumber:\n");

scanf("%d",&a);

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

if(a%i==0)break;

if(i==a)

printf("%d是素數\n",a);

else

printf("%d不是素數\n",a);

}while(a!=0);

⑶ 用C語言,判斷1-100之間有多少個素數,並輸出所有素數。

可以使用篩法來判斷 1-100 之間有多少個素數,並輸出所有素數。篩法是一種通過枚舉合數的因子來篩選出素數的方法。

下面是用 C 語言實現的代碼示例:

#include <stdio.h>
#include <stdbool.h>

#define N 100

int main(void)
{

// 創建一個 bool 類型的數組,用來存儲每個數是否為素數
bool prime[N + 1];


// 初始化數組,假設所有數都是素數
for (int i = 0; i <= N; i++)
prime[i] = true;

// 使用篩法篩選出素數
for (int i = 2; i <= N; i++)
{
// 如果 i 不是素數,則跳過
if (!prime[i])
continue;

// 輸出 i
printf("%d ", i);

// 將 i 的倍數標記為合數
for (int j = i * i; j <= N; j += i)
prime[j] = false;
}

return 0;

}


運行結果如下:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

在這個程序中,使用了一個 bool 類型的數組來存儲每個數是否為素數。使用篩法篩選出 1-100 之間的素數,並輸出每個素數。

需要注意的是,C 語言沒有內置的 bool 類型,需要使用頭文件 stdbool.h 來支持 bool 類型。在上面的代碼中,需要包含頭文件 stdio.h 和 stdbool.h。

⑷ 求判斷素數的C語言程序

C語言-尋找素數

附代碼:
#include<stdio.h>
#include<math.h>
int main()//原理:設ab=c,a<b,則有a<根號c<b。若設a恆小於根號c,則只需判斷a是否為因數
{
int a, b;
printf("請按從小到大輸入兩個素數:");
scanf_s("%d %d", &a, &b);
int n = 0,m=0,sum = 0;
double i, j;//i是從a到b的待篩選數,j是從2到根號i的除數,要判斷j是否為i的因數
for (i = a; i <= b; i++)
{
m = 0;
int c = int(pow(i, 0.5));
for (j = 2; j <= c; j++)
{
if ((i / j - int(i / j)) == 0.0)
{
m++;//m是i被從2到根號i的j除了之後,商為整數,即發現j是i的因數的次數
}
}
if (m==0)
{
printf("找到素數:%d ", int(i));
n++;
sum = sum + i;
}
}
printf("大於等於%d,小於等於%d的素數的個數為:%d ", a, b, n);
printf("它們的和為:%d", sum);
return 0;
}

⑸ 用C語言如何判斷素數

素數又稱質數,所謂素數是指除了 1 和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被 2~16 的任一整數整除。

思路1、判斷一個整數m是否是素數,只需把 m 被 2 ~ m-1 之間的每一個整數去除,如果都不能被整除,那麼 m 就是一個素數。

思路2、判斷方法還可以簡化。

m 不必被2~m-1之間的每一個整數去除,只需被2~√m之間的每一個整數去除就可以了。如果 m 不能被2~√m間任一整數整除,m必定是素數。例如判別17是是否為素數,只需使17被2~4之間的每一個整數去除,由於都不能整除,可以判定17是素數。


原因:因為如果m能被2~m-1之間任一整數整除,其二個因子必定有一個小於或等於√m,另一個大於或等於√m。

例如16能被2、4、8整除,16=2*8,2小於 4,8大於4,16=4*4,4=√16,因此只需判定在2~4之間有無因子即可。


兩種思路的代碼請看解析。

拓展資料:

素數(prime number)又稱質數,有無限個。素數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。

C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。

網路——C語言

⑹ C語言編寫一個程序判斷一個數是否為素數急求

目的:判斷一個數是否為素數

#include<stdio.h>


intmain(void)


{


int m;


inti;


scanf("%d",&m);


for(i=2;i< m;i++) //2到(m-1)的數去除m


{


if(m%i==0)//判斷能否整除


break;

}

if(i== m)


printf("YES! ");


else


printf("No! ");


}

for循環的功能:

①若能整除,通過break跳出函數;

②若一直到m-1都不能整除,此時i再自增1到m,不滿足i< m跳出for循環,這時i= m。

(6)初等c語言判斷素數個數擴展閱讀:


素數定理:



1、在一個大於1的數a和它的2倍之間(即區間(a,2a]中)必存在至少一個素數。



2、存在任意長度的素數等差數列。



3、一個偶數可以寫成兩個合數之和,其中每一個合數都最多隻有9個質因數。(挪威數學家布朗,1920年)。



4、一個偶數必定可以寫成一個質數加上一個合成數,其中合數的因子個數有上界。(瑞尼,1948年)。



5、一個偶數必定可以寫成一個質數加上一個最多由5個因子所組成的合成數。後來,有人簡稱這結果為(1+5)(中國潘承洞,1968年)。



6、一個充分大偶數必定可以寫成一個素數加上一個最多由2個質因子所組成的合成數。簡稱為(1+2)。