LGP5495ディリクレプレフィックスと

タイトル

それは、テンプレートと呼ばれて、なぜ私はかなり理解していません

考慮\を(a_iを\)することができる\(b_j \)発生寄与、場合に限り\(a_iを= PRODのp_k ^ \ {a_k}、b_j = PRODのp_k ^ {b_k} \ \ FORALL K \ a_k \当量b_k \) その後、我々はと寸法と同等として、電力あたりの質量数回持っている\(\)を配列プレフィックスと高次元を見つけます

そこで、いくつかの電力品質の各々は、列挙、および篩オングストロームの複雑さと、ライン上で行うための高次元プレフィックス方法の使用(\ \ operatorname {O(N \ログ\ログの\ n)} \)

#include<bits/stdc++.h>
#define re register
#define uint unsigned int
const int maxn=2e7+5;
uint seed,a[maxn],ans;
int n,f[maxn],p[maxn>>2];
inline uint getnxt(){
    seed^=seed<<13;seed^=seed>>17;
    seed^=seed<<5;return seed;
}
int main() {
    scanf("%d%u",&n,&seed);
    for(re int i=2;i<=n;i++) {
        if(!f[i]) p[++p[0]]=i;
        for(re int j=1;j<=p[0]&&p[j]*i<=n;j++) {
            f[p[j]*i]=1;
            if(i%p[j]==0) break;
        }
    }
    for(re int i=1;i<=n;i++) a[i]=getnxt();
    for(re int i=1;i<=p[0];i++)
        for(re int j=2;j*p[i]<=n;j++)
            a[p[i]*j]+=a[j];
    for(re int i=2;i<=n;i++) a[i]+=a[1],ans^=a[i];
    printf("%u",ans^a[1]);
    return 0;
}

おすすめ

転載: www.cnblogs.com/asuldb/p/11355745.html