zoukankan      html  css  js  c++  java
  • bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】

    首先化简,题目要求的是

    [G^{sum_{i|n}C_{n}^{i}}\%p ]

    对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理

    [G^{sum_{i|n}C_{n}^{i}\%varphi(p)} ]

    [G^{sum_{i|n}C_{n}^{i}\%p-1} ]

    因为p-1不是质数,所以把它质因数分解为2,3,4679,35617,最后用中国剩余定理合并即可。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int p=999911659,N=50005;
    int g,n,m[5],fac[5][N],t[5]={2,3,4679,35617};
    int read()
    {
    	int r=0,f=1;
    	char p=getchar();
    	while(p>'9'||p<'0')
    	{
    		if(p=='-')
    			f=-1;
    		p=getchar();
    	}
    	while(p>='0'&&p<='9')
    	{
    		r=r*10+p-48;
    		p=getchar();
    	}
    	return r*f;
    }
    int ksm(long long a,int b,int p)
    {
    	long long r=1ll;
    	while(b)
    	{
    		if(b&1)
    			r=r*a%p;
    		a=a*a%p;
    		b>>=1;
    	}
    	return r;
    }
    int C(int n,int m,int x)
    {
    	if(n<m)
    		return 0;
    	return fac[x][n]*ksm(fac[x][n-m]*fac[x][m],t[x]-2,t[x])%t[x];
    }
    int lucas(int n,int m,int x)
    {
    	return !m?1:C(n%t[x],m%t[x],x)*lucas(n/t[x],m/t[x],x)%t[x];
    }
    void exgcd(int a,int b,int &x,int &y)
    {
    	if(b==0)
    	{
    		x=1,y=0;
    		return;
    	}
    	exgcd(b,a%b,y,x);
    	y-=a/b*x;
    }
    int wk()
    {
    	int a,b,x,y;
    	a=t[0],b=m[0];
    	for(int i=1;i<4;i++)
    	{
    		exgcd(a,t[i],x,y);
    		x=(((m[i]-b)*x)%t[i]+t[i])%t[i];
    		b=b+a*x;
    		a=a*t[i];
    	}
    	return b;
    }
    int main()
    {
    	for(int i=0;i<4;i++)
    	{
    		fac[i][0]=1;
    		for(int j=1;j<=t[i];j++)
    			fac[i][j]=fac[i][j-1]*j%t[i];
    	}
    	n=read(),g=read();
    	if(g==p)
    	{
    		puts("0");
    		return 0;
    	}
    	g%=p;
    	for(int i=1;i*i<=n;i++)
    		if(n%i==0)
    		{
    			int now=n/i;
    			for(int j=0;j<4;j++)
    			{
    				if(now!=i)
    					m[j]=(m[j]+lucas(n,i,j))%t[j];
    				m[j]=(m[j]+lucas(n,now,j))%t[j];
    			}
    		}
    	printf("%d
    ",ksm(g,wk(),p));
    	return 0;
    }
    
  • 相关阅读:
    Flink学习四:Flink运行架构
    Flink学习三:Flink安装
    Flink学习二:Flink基本架构
    进程的作业
    并发编程
    粘包解决模板
    网络下载作业
    网络通信远程操控
    网络编程套接字
    网络编程基础之网络协议篇
  • 原文地址:https://www.cnblogs.com/lokiii/p/8375953.html
Copyright © 2011-2022 走看看