欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

B1013 数素数(20分)

发布时间:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 B1013 数素数(20分) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

B1013 数素数(20分)

\(P​_i\)表示第 i 个素数。现任给两个正整数 \(M≤N≤10^4\),请输出 \(P_M\)\(P_N\)的所有素数。

输入格式:

输入在一行中给出 M 和 N,其间以空格分隔。

输出格式:

输出从 \(P_​M\)\(P_N\)的所有素数,每 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

思考

这个问题是否需要筛法?
我觉得是需要的,因为10的4次方已经很大了,是素数的个数达到10的4次方。
算法笔记上说,筛法和非筛法都可以解决问题。
那么首先用非筛法试一下。
前100009个数有9593个素数。所以这里用不用筛法,都可以解决问题前1000009有78499个素数;
每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
怎么办?这种输出形式。
给出第4个测试点答案错误的代码

#include<cstdio> #include<cstring> #include<cmath> const int MAXN=100009; int prime[MAXN], pNum = 0; bool p[MAXN] = {0}; bool isPrime(int n){if(n<=1) return false;int sqr=(int)sqrt(1.0*n);for(int i=2;i<=sqr;i++){if(n%i==0) return false;}return true; }void Find_Prime(){for(int i = 1; i<MAXN;i++){if(isPrime(i) == true){prime[pNum++] = i;p[i] = true;}} } int main(){Find_Prime();int M,N;int enter=0; scanf("%d %d", &M, &N);for(int i=M-1;i<N-1;i++){printf("%d",prime[i]);enter++;if(enter!=10){printf(" ");}else {printf("\n");enter = 0;}}printf("%d",prime[N-1]); }

不断扩大打表范围
终于在扩大到
const int MAXN=110050;时候AC掉了,估计是最大的极限的素数10的4次方的。

转载于:https://www.cnblogs.com/lingr7/p/10292015.html

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的B1013 数素数(20分)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。