一个匪夷所思的奇怪现象,求大神解惑?

P1835 素数密度

你把tmp设大一点试试?
by 142857cs @ 2019-04-02 09:52:49


@[142857cs](/space/show?uid=35760) 上述第一个程序把tmp或者isprime数组开大点就可以,可问题是为什么第二个程序将数组isprime初始化为true,大小一样刚好开到sqrt(R)=tmp,即46342就可以,而初始化为false就必须多开很多,试了一下如果是初始化为false,isprime大小要开到差不多100000才不会出错,初始化为false和true怎么会相差这么大,本质上这两个程序不是一模一样的吗?
by Stest @ 2019-04-02 10:11:27


@[Stest](/space/show?uid=88977) 应该是你访问了不该访问的内存,但也不知道是怎么回事
by 142857cs @ 2019-04-02 10:31:42


@[Stest](/space/show?uid=88977) 这两种写法本质应该是不一样的,建议去看看线筛的题解
by Karlis @ 2019-04-02 10:33:27


@[Stest](/space/show?uid=88977) 你代码里面i*k-L会变成负数,访问到奇怪的内存去了
by Wolfycz @ 2019-04-02 11:10:06


@[Wolfycz](/space/show?uid=21633) 是哦,考虑不够严谨,前面加了一个判断就没有问题了,谢谢啦! ```cpp if(i*k>=L) prime[i*k-L]=true; ```
by Stest @ 2019-04-02 14:56:11


|