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、用除去已有的数的倍数,不是素数

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