首页 > 其他分享 >单位根反演学习笔记

单位根反演学习笔记

时间:2024-02-13 10:34:00浏览次数:22  
标签:limits int dfrac sum 单位根 笔记 反演 mod

单位根反演

\[[n|a]=\dfrac{1}{n}\sum\limits_{k=0}^{n-1}w^{ak}_{n} \]

证明:

当\(i\not\equiv 0\pmod n\)时,由等比数列求和公式可得:

原式\(=\dfrac{1}{n}\times \dfrac{w^{an}_n-1}{w^a_{n}-1}\),而右边分子为0,分母不为0,因此和为0。

当\(i\equiv 0\pmod n\)时,有原式\(=\dfrac{1}{n}\sum\limits_{i=0}^{n-1}w^0_n=1\)。

qoj5370

求\(\sum\limits_{j=0}^{\infty}\binom{k}{i+jn}\)。

推式子:

\[\begin{aligned} \sum\limits_{j=0}^{\infty}\binom{k}{i+jn}&=\sum\limits_{v=0}^k\binom{k}{v}\dfrac{\sum_{j=0}^{n-1}(w^{v-i}_n)^j}{n}\\ &=\dfrac{1}{n}\sum\limits_{j=0}^{n-1}w^{-ij}_n\sum\limits_{v=0}^k\binom{k}{v}w^{vj}_n\\ &=\dfrac{1}{n}\sum\limits_{j=0}^{n-1}w^{-ij}_n(1+w^j_n)^k \end{aligned}\]

求出单位根就可以直接求了。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,k,p,mod,P;
int st[105],hst;
inline int qpow(int x,int k){x%=mod;int ans=1;for(;k;k>>=1,x=1ll*x*x%mod)if(k&1)ans=1ll*ans*x%mod;return ans;}
inline bool check(int x){
    for(int i=1;i<=hst;i++){
        if(qpow(x,P/st[i])==1)return 0;
    }
    return 1;
}
inline int getw(){
    int s=sqrt(mod),x=mod-1;
    hst=0;
    for(int i=2;i<=s;i++)if(x%i==0){
        st[++hst]=i;
        while(x%i==0)x/=i;
    }
    if(x>1)st[++hst]=x;
    for(int i=2;i<=mod;i++)if(check(i)){
        return i;
        break;
    }
    return 0;
}
inline void solve(){
    cin>>n>>p>>k>>m>>mod;
    m=((p-m)%n+n)%n;
    P=mod-1;
    int w=getw();
    // cout<<w<<" ";
    w=qpow(w,P/n);
    // cout<<w<<endl;
    int inv=qpow(w,P-m),ans=0;
    for(int i=0,x=1,y=1;i<n;i++){
        ans=(ans+1ll*y*qpow(1+x,k)%mod)%mod;
        y=1ll*y*inv%mod,x=1ll*x*w%mod;
    }
    ans=1ll*ans*qpow(n,mod-2)%mod;
    cout<<ans<<endl;
}
int main(){
    ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    while(T--)solve();
    return 0;
}

标签:limits,int,dfrac,sum,单位根,笔记,反演,mod
From: https://www.cnblogs.com/Xttttr/p/18014370

相关文章

  • CDQ分治学习笔记
    CDQ分治其实CDQ本质就类似线段树,\(i\)的贡献由\(1\)到\(i-1\)在线段树上拆出的log个节点组成,然后将可以被同一段区间做贡献的点一起计算从而保证复杂度。例题:P3810【模板】三维偏序(陌上花开)题意:对于\(k\in[1,n]\)求三维偏序数量为\(k\)的点的个数。思路:其实就是求每个点的......
  • FWT学习笔记
    FWTFWT即位运算卷积,用来快速计算形如\(\sum\limits_{i\oplusj=k}f_ig_j\),其中\(\oplus\)表示某种位运算。设FWT(A)是幂级数A经过\(\rmFWT\)变换之后得到的幂级数。我们需要令其满足:\(A*B=C\LongleftrightarrowFWT(A)·FWT(B)=FWT(C)\)(点积)。\(\rmFFT\)是......
  • 网络通信基础知识学习笔记
    一.图解网络为什么需要TCP/IP网络模型:为了适应互联网环境下多种多样的设备,设计的一套通用的网络协议对于同一台设备进程间的通信方式:管道,消息队列,共享内存,信号量TCP/IP网络模型的分层:应用层:用户能够直接接触到的层次,互联网软件都是在应用层进行实现.......
  • risinglight-tutorial 学习笔记
    01-01hello-sql该示例提供了一个将Sql解析为语法树并返回select'hello';中字符串的逻辑其核心逻辑如下:pubfnrun(&self,sql:&str)->Result<Vec<String>,Error>{//parse--借用开源的PostgreSqlDialect进行Sql的解析//来自sqlparser-0.13.0......
  • 读千脑智能笔记12_阻止人类灭绝
    1. 阻止人类灭绝1.1. 宇宙中唯一知道这些的物体,唯一知道宇宙存在的物体,是我们的大脑1.2. 如果没有关于某个事物的知识,我们能说这个事物就一定存在吗?1.2.1. 我们的大脑扮演着这样一个独特的角色,这很令人着迷1.3. 30%的大脑,即旧脑,是由许多不同部分组成的1.3.1. 旧脑......
  • 2024/2/12学习进度笔记
    sparkrdd持久化frompysparkimportSparkContext,SparkConfimportosimportrefrompyspark.storagelevelimportStorageLevelos.environ['SPARK_HOME']='/export/server/spark'PYSPARK_PYTHON="/root/anaconda3/envs/pyspark_env/bin......
  • Suffix Array:后缀数组学习笔记
    后缀排序后缀排序,顾名思义就是给后缀排个序。朴素做法是\(O(n^2\logn)\)的,无法接受。因此诞生了基于倍增思想的后缀排序算法。其中倍增思想在集训队论文中讲得很好,在此不再赘述。这里主要讲代码实现。constintN=2e6+10;chars[N];intn,m,sa[N],rk[N],tp[N],b[N];void......
  • 图论笔记
    最短路相关最短路基础\(\mathbf{Floyed}\)求最短路本质上是dp。设\(f(w,i,j)\)表示当前松弛到第\(w\)轮,\(i\rightarrowj\)的最短路是\(f(w,i,j)\)。转移显然是:\[f(w,i,j)=f(w-1,i,k)+f(w-1,k,j)\]\(w\)显然可以滚掉。时间复杂度\(O(n^3)\)......
  • esp32笔记[15]-使用LVGL 9.0显示图片
    摘要在esp32s3上使用LVGL9.0显示图片.关键信息编译环境:ESP-IDFv4.4LVGL:9.0board:酷世DIYESP32S3开发板Link:https://item.taobao.com/item.htm?&id=655913924680flashsize:8MBLCDdriver:ILI9341LCDmodule:2.4TFTSPI240x320v1.2Touchdriver:XPT2046......
  • 线段树分治学习笔记
    线段树分治线段树分治是一种可以离线处理带撤销问题的常用手段。一般而言,题目中加入操作很好维护,但删除操作不好维护,这时可以对时间维建线段树,把每一个操作加入其存在时间段对应的线段树节点上,然后处理所有询问,进入一个节点时将这个节点里的操作加入,递归左右儿子,然后撤销这一次做......