令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到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
注:本题使用python语言提交时,有一个测试用例一直超时,猜测是边界值m=1,n=10000的情况,因此暂时用C++提交此题,
后续会继续优化此题的python解法,直到提交成功为止。现在先把C++代码和超时的python代码贴上来,优化成功后会更新此
博文,同时关于此题的python解法,欢迎小伙伴们前来交流。
代码如下(C++):
/***__author__ = ‘lywade’***/ #include <iostream> #include <math.h> using namespace std; int judge_prime(int x) { for(int i=2; i<=sqrt(x); i++) if(x % i==0) return 0; return 1; } int main() { int i = 2, n, m; int count = 0; int result_num = 0; int flag = 1; cin>>m>>n; while(flag) { if(judge_prime(i)) { count++; if((count>=m) && (count<n)) { result_num++; if(result_num%10==0) cout<<i<<endl; else cout<<i<<' '; } if (count==n) { cout<<i<<endl; flag = 0; } } i++; } //system("pause"); return 0; }
(python):
__author__ = 'lywade' from math import sqrt import sys def judge_prime(x): ''''' for i in range(2,int(sqrt(x))+1): if x % i == 0: return False return True ''' i = 2 while i * i <= x: if x % i == 0: return False i += 1 return True m, n = map(int,raw_input().split()) count = 0 print_num = 0 flag = True i = 2 while flag: if judge_prime(i): count += 1 if count >= m and count < n: print_num += 1 if print_num % 10 != 0: sys.stdout.write(str(i)+' ') else: #sys.stdout.write(str(i)+'\n') print i if count == n: print i flag = False i += 1