試題 演算法提高 質數2(C語言)

小蘿蔔頭和大蘿蔔頭發表於2020-11-29

資源限制
時間限制:1.0s 記憶體限制:256.0MB
問題描述
  給定一個正整數N,請你輸出N以內(不包含N)的質數以及質數的個數。
輸入格式
  輸入一行,包含一個正整數N。
輸出格式
  共兩行。
  第1行包含一個整數,表示N以內質數的個數。
  第2行包含若干個素數,每兩個素數之間用一個空格隔開,素數從小到大輸出。
樣例輸入
10
樣例輸出
4
2 3 5 7
資料規模和約定
  N<=1000

#include<stdio.h>
//定義判斷素數的函式
int prime(int n) {
	//1不是素數,2和3是素數
	if(n==1) {
		return 0;
	}
	if(n==2 || n==3) {
		return 1;
	}
	//素數的定義為除了1和自身以外沒有別的約數
	int i;
	//n/2是因為過了一半就不可能有約數了
	for(i=2; i<=n/2; i++) {
		if(n%i==0) {
			return 0;
		}
	}
	//迴圈過後依然沒有返回,代表沒有約數。
	return 1;
}
int main() {
	int n;
	scanf("%d",&n);//輸入
	int i;
	int num=0;//記錄有多少個素數
	for(i=1; i<n; i++) {
		if(prime(i)==1) {
			num++;
		}
	}
	printf("%d\n",num);//輸出有多少個素數
	for(i=1; i<n; i++) {
		if(prime(i)==1) {
			printf("%d ",i);//如果是素數就輸出
		}
	}
	return 0;
}

相關文章