zoukankan      html  css  js  c++  java
  • 【Cf #502 F】The Neutral Zone

    本题把$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
    ", ans);
      
      return 0;
    }
    View Code
  • 相关阅读:
    Ubuntu MP4转MP3 软件:soundconverter
    Jupyter 中添加conda环境
    Pandas 比较两个 DataFrames 是否相同
    苹果ID不能登陆:The action could not be completed. Try again
    awsome node.js
    Cygwin
    library dep
    process
    MSCV version
    cmake_host_system_information
  • 原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/9451985.html
Copyright © 2011-2022 走看看