1013 數素數 區間素數 指定格式輸出 找素數快速方法 PTAbasic 浙大C++

題目:
令 P​i表示第 i 個素數。現任給兩個正整數 M≤N≤104​​,請輸出 P​M到 PN的所有素數。
輸入格式:
輸入在一行中給出 M 和 N,其間以空格分隔。
輸出格式:
輸出從 P​M到 PN的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。

輸入樣例:
5 27
輸出樣例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

代碼:

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	int min,max,now=1,count=1;
	cin>>min>>max;
	if(min<1)
		min=1;
	
	int prime[max-min+1];
	if(min==1)
		prime[0]=2;
	count++;
	while(count<=max){
		int flag=1;
		now=now+2;
		int mid=sqrt(now);
		for(int i=2;i<mid+2;i++){
			if(now%i==0){
				flag=0; 
				//cout<<now<<"不是素數 "; 
				break;
			}
		}
		if(flag==1){
			if(count>=min){
				//cout<<"存入素數"<<now<<" "; 
				prime[count-min]=now;
			}
			count++;
		}
	}
	for(int i=0;i<count-min-1;i++){
		cout<<prime[i];
		if((i+1)%10==0)
			cout<<endl;
		else
			cout<<" ";
	}
	if((count-min-1)%10==0&&max!=1&&min!=max)
		cout<<endl;
	cout<<prime[count-min-1];
}

要點:
計算素數的快速方法
1、每次增加2,偶數不可能是素數。
2、最大值設置爲其開方
3、用除去已有的數的倍數,不是素數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章