zoukankan      html  css  js  c++  java
  • loj6247 九个太阳

    题意:

    k<=2^20,n<=10^15.

    标程:

     1 #include<cstdio>
     2 using namespace std;
     3 typedef long long ll;
     4 const int mod=998244353;
     5 const int root=31;
     6 ll wn,w,ans,l,n,k;
     7 ll ksm(ll x,ll y)
     8 {
     9     ll res=1;
    10     while (y) {if (y&1) res=res*x%mod; x=x*x%mod; y>>=1;}
    11     return res;
    12 }
    13 int main()
    14 {
    15     scanf("%lld%lld",&n,&k);
    16     l=31-__builtin_clz(k);w=ksm(root,1<<23-l);wn=1;
    17     for (int i=0;i<k;i++)
    18       ans=(ans+ksm(1+wn,n))%mod,wn=wn*w%mod;
    19     printf("%lld
    ",ans*ksm(k,mod-2)%mod);
    20     return 0;
    21 }

    题解:二项式定理+原根

    当k=1的时候,Ans=sigma(C(n,i))=(1+x)^n=2^n.

    当k=2的时候,将x=-1代入,将两个式子加起来/2就是Ans。(1^j+(-1)^j)/2

    当k=4的时候……我们可以仿照fft的奇偶分组过程,给每个项一个系数,当k|i,第i项的系数为1。

    原根(n次单位根)可以解决!得到如下判定式:

    运用对复根的二项式定理可以化简答案式:

    O(klogn)。

  • 相关阅读:
    概率期望训练之五
    概率期望训练之四
    JavaScript Source Map详解
    JSON.parse、JSON.stringify
    Linux cp命令直接覆盖不提示方法
    Service Worker
    HTML5 应用程序缓存
    二分图
    Tarjan
    FFT迭代加深 & NTT 多项式求逆
  • 原文地址:https://www.cnblogs.com/Scx117/p/8722214.html
Copyright © 2011-2022 走看看