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)。

  • 相关阅读:
    [USACO08MAR]土地征用Land Acquisition
    树链剖分
    [AHOI2008]紧急集合 / 聚会
    P1852 [国家集训队]跳跳棋
    Ant Trip(欧拉回路+并查集)
    单词游戏
    POJ3694 Network
    C++ STL小总结
    2-Sat专题
    6大名家带你穿越大半个中国去深思
  • 原文地址:https://www.cnblogs.com/Scx117/p/8722214.html
Copyright © 2011-2022 走看看