本文目錄一覽:
C語言求素數個數,交上去總說我運行超時,大佬能優化一下嗎?
#includestdio.h
#includemath.h
#define max(x,y) xy?x:y
int main() {
int a,b, i, j,flag1=0,count=0;
scanf(“%d %d”,a,b);
if(b=3)
{
a=max(a,2);//從2開始
for(int i=a;i=b;i++)
{
flag1=0;//用於標記
for(int j=2;j*j=i;j++)//j*j=i;減少不必要的循環
{
if(i%j==0)//i能被j整除,不是素數
{
flag1=1;//標記
break;//結束內循環,減少不必要的循環
}
}
if(flag1==0)//未被標記即是素數
count++;//素數計數
}
}
else if(b==2)
count=1;
else
count=0;
printf(“%d”,count);
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語言求1到n的素數(不要超時)
這個應該是最快的方式了 如果還超時 那麼就無解了
#include stdio.h
#include stdlib.h
#include string.h
void init(char *map, int max)
{
int i,j;
memset(map, 0, max);
for(i = 2; i = max; i ++)
{
if(map[i]) continue;
for(j = i*2; j = max; j += i)
map[j] = 1;
}
}
int main()
{
int n;
char *map;
int i, j;
printf(“input max number n\n”);
scanf(“%d”, n);
map = malloc(n);
if(map == NULL)
{
printf(“not enough memory\n”);
return -1;
}
init(map, n);
printf(“prime numbers list from 1 to %d\n”, n);
for(i = 2, j = 0; i n; i ++)
{
if(!map[i])
{
printf(“%d “, i);
if(++j % 10 == 0) printf(“\n”);
}
}
printf(“\n”);
return 0;
}
用C語言如何判斷素數
按照如下步驟即可用C語言判斷素數:
1、首先打開visual C++ 6.0,然後點擊左上角的文件,再點擊新建。
2、然後在彈出的新建對話框中點擊C++Source File。
3、在新建的文件文本框中輸入預處理命令和主函數,即函數頭和空類型。
4、然後再定義變數並輸入一個數字,即定義變數的數據類型,輸出文字提示,再輸入一個數字。
5、然後用for函數和if函數判斷是否是素數。
6、點擊確定後即可成功創建剛剛新建的程序,隨機輸入一個數字即可驗證一下剛剛創建的C語言。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248507.html