码迷,mamicode.com
首页 > 其他好文 > 详细

【Cf #502 F】The Neutral Zone

时间:2018-08-09 23:09:27      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:inf   isp   mod   clu   img   unsigned   bit   alt   sign   

技术分享图片

本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数。

由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数,他们可以被表示成$p \equiv \pm 1 (mod \; 6) $。(具体来讲就是把数表示成$6k, 6k+1, 6k+2, 6k+3, 6k+4, 6k+5$,显然只有余数为$1$或$5$才有成为质数的可能性)。然后我们需要筛的个数就变成原来的三分之一了。

另一个做法:分块,一部分一部分筛,空间限制就不紧张了。

 

技术分享图片
#include <cstdio>
#include <bitset>

typedef unsigned UI;

UI ans, n, A, B, C, D;
std::bitset<100000001> ntp;

inline void Add(UI x) {
  UI fc = A * x * x * x + B * x * x + C * x + D;
  for (UI t = n; t; t /= x) {
    ans += t / x * fc;
  }
}

int main() {
  scanf("%u%u%u%u%u", &n, &A, &B, &C, &D);
  Add(2); Add(3);
  for (UI i = 5, d = 2; i <= n; i += d, d = 6 - d) {
    if (!ntp[i / 3]) {
      Add(i);
      if (i > n / i) continue;
      for (UI j = i * i, v = d; j <= n; j += i * v, v = 6 - v) {
        ntp[j / 3] = 1;
      }
    }
  }
  printf("%u\n", ans);
  
  return 0;
}
View Code

 

【Cf #502 F】The Neutral Zone

标签:inf   isp   mod   clu   img   unsigned   bit   alt   sign   

原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/9451985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!