PTA乙级1013 - 数素数 - 素数打表模板
题目
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112
中文题。
思路
素数打表+控制格式
注意
-
数组直接开10e4+10,cnt开在外面的话,运行出来是错误的,但是提交是AC的,难道后台数据问题,郁闷死我了,我说怎么代码挺对,本地输出不对。可能边界上的点在不同编译器下访问存在问题。
-
需要注意边界上的数据,也就是如果a和b同时都给出10e4,这样子的话输出就是104729,影响开的数组的大小。所以之后写题的时候数组大小不一定要根据题意去开大10个空间,需要考虑最大的数据,根据这个数据去开,而且记录素数的数组p和标记数组book我们需要开大一个空间,也是因为边界。
-
这题是简单题,但是因为数组边界的问题导致在不同编译器上输出有问题。
-
其实我还是有问题,为什么本地错误提交正确,我觉得地址访问问题不太可能是随机访问的。
AC代码
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
//const int N=10e4+10e3;
const int N=104729; // N=104728的时候第四组数据错误(a=b=10e4)
int a,b,p[N+1],book[N+1],cnt=0;
// 考虑一下边界数据、N的大小、最后一个数据b=10e4的时候,输出104729
void init()
{
for(int i=2;i<=N;i++)
{
if(!book[i])
{
p[++cnt]=i;
for(int j=i+i;j<=N;j+=i)
book[j]=1;
}
}
}
int main()
{
cin>>a>>b;
init();
int x=1;
for(int i=a;i<=b;i++,x++) // 相当于外面int x=0; 函数体里面x++
{
if(x%10==0||(i==b)) // if((i+1)%10==0||(i==b))
cout<<p[i]<<endl;
else
cout<<p[i]<<" ";
}
return 0;
}
分类:
数论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-03-07 寒假Day44:JAVA-异常处理
2020-03-07 寒假Day44:bfs