AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

关于线性筛模板的玄学问题



0


题目链接 868. 筛质数

我遇到了模板背错了但是却AC了的问题。

错误的代码:

#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int n;
int primes[N], cnt;
bool st[N];

void get_primes(int n)
{
    for (int i = 2; i <= n; i ++ )
    {
        if (!st[i]) primes[cnt ++ ] = i;
        for (int j = 0; primes[j] <= n / i; j ++ )
        {
            st[primes[j] * i] = 1;
            if (primes[j] % i == 0) break; // 就是这里,模板上是if (i % primes[j] == 0) break;
        }                                  // 有没有大佬能解释一下这个玄学的AC?
    }
}

int main()
{
    scanf("%d", &n);

    get_primes(n);

    printf("%d\n", cnt);

    return 0;
}

问题见代码注释部分。
按说小数模大数应该不能整除啊



提问于18天前
星河依旧长明
6344


1 个问答



0

数据量大一点应该会T,但是wa是不会的,因为这个break只是避免重复查找,,所以你哪怕不break也是对的,

回答于18天前
HuParry
1134

@HuParry:  好的,谢谢你! –  星河依旧长明   18天前

@星河依旧长明:  没必要,因为题目数据量是1e6,你的算法复杂度约是nlogn,在题目所能接受的复杂度内。如果筛到1e7我估计会出现问题。 –  HuParry   18天前

那么我可以提交加强数据的工单吗? –  星河依旧长明   18天前


我来回答
你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息