MOOC清华《程序设计基础》第4章第1题:找出ab间的素数(用筛法做)

来源:互联网 发布:人工智能加大贫富差距 编辑:程序博客网 时间:2024/06/15 07:05

题目描述

(再次申明:本上机题全部由程序自动评判对错,所以没有要求的输出请一定不要出现,具体参照样例输入和输出即可)

输入两个正整数a、b,找出[a, b]之间的素数,由小到大输出。(2 <= a <= b <=1000000)

输入描述

每一行输入两个正整数,两数之间有一个空格,可能有多行输入!

tips:利用while(cin>>a>>b)语句实现循环输入变量

输出描述

输出[a,b]之间的素数,素数之间用一个空格隔开,每个输出占一行

样例输入

2 53 11
样例输出

2 3 53 5 7 11

#include <iostream>using namespace std;int main(){int a[10] = {0}, b[10] = {0};int i = 0;bool sieve[10][10000];bool IsPrime_Sieve(bool sieve[], int a, int b);void OutputOfArray(bool sieve[],int a, int b);  while(cin>>a[i]>>b[i]) {IsPrime_Sieve(sieve[i], a[i], b[i]);i++;}for(int j = 0; j < i; j++)OutputOfArray(sieve[j], a[j], b[j]); return 0;}bool IsPrime_Sieve(bool sieve[], int a, int b){for(int i = 2; i <= b; i++)  //这个循环用来给筛子赋初值,注意不要漏掉任何一个筛孔 sieve[i]  = true;for(int d = 2; d * d <= b; d++)  //这个循环用枚举因子法判断素数 if( sieve[d] )  //如果 d 没有被筛掉 for(int n = d * d; n <= b; n += d)sieve[n]  = false;  //把非质数 n 筛掉 }void OutputOfArray(bool sieve[],int a, int b)  {      for(int i = a; i <= b; i++)      if( sieve[i] )        cout << i << ' ';      cout << endl;  }  

形如 while(cin>>a>>b) 的语句是用来判断cin输入流是否正常,退出循环的方法为Ctrl+Z。


阅读全文
0 0
原创粉丝点击