浏览器标题切换
浏览器标题切换end

PTA乙级1013 - 数素数 - 素数打表模板

题目

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112

中文题。

思路

素数打表+控制格式

注意

  1. 数组直接开10e4+10,cnt开在外面的话,运行出来是错误的,但是提交是AC的,难道后台数据问题,郁闷死我了,我说怎么代码挺对,本地输出不对。可能边界上的点在不同编译器下访问存在问题。

  2. 需要注意边界上的数据,也就是如果a和b同时都给出10e4,这样子的话输出就是104729,影响开的数组的大小。所以之后写题的时候数组大小不一定要根据题意去开大10个空间,需要考虑最大的数据,根据这个数据去开,而且记录素数的数组p和标记数组book我们需要开大一个空间,也是因为边界。

  3. 这题是简单题,但是因为数组边界的问题导致在不同编译器上输出有问题。

  4. 其实我还是有问题,为什么本地错误提交正确,我觉得地址访问问题不太可能是随机访问的。

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;
}
posted @   抓水母的派大星  阅读(62)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.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
点击右上角即可分享
微信分享提示