bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951
数学综合题。
费马小定理得指数可以%999911658,又发现这个数可以质因数分解。所以分解做完再用中国剩余定理合并。
为什么不能预处理阶乘的逆元?
为什么正常的中国剩余定理会T?非得两两合并?
而且两两合并里的 a0+=m0*x 不太明白。
PS:现在明白了。新的a是a=a1+m1*x1=a2+m2*x2,a的通解是a1加上任意倍的m1*x1。
需要特判!那些C( )、lucas( )里的判断也要注意。
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll m[]={,,,,};//ll
ll n,g,ans,x,y,a[],jc[][],jcn[][],M[];
ll pw(ll x,ll k,ll mod)
{
ll ret=;while(k){if(k&)(ret*=x)%=mod;(x*=x)%=mod;k>>=;}return ret;
}
void init()
{
for(int u=;u<=;u++)M[u]=m[]/m[u];
for(int u=;u<=;u++)
{
jc[u][]=;
for(int i=;i<m[u];i++)jc[u][i]=jc[u][i-]*i%m[u];
// jcn[u][m[u]-1]=pw(jc[u][m[u]-1],m[u]-2,u); //为什么不能预处理阶乘的逆元?
// for(int i=m[u]-2;i;i--)jcn[u][i]=(jcn[u][i+1]*(i+1))%m[u];
}
}
ll C(ll i,ll j,int type)
{
if(i<j)return ; //
return jc[type][i]*pw(jc[type][j]*jc[type][i-j],m[type]-,m[type])%m[type]; //
// if(!j)return 1;
// return jc[type][i]*jcn[type][j]%m[type]*jcn[type][i-j]%m[type];
}
ll lucas(ll i,ll j,int type)
{
if(!j||!i)return ; //
if(i<m[type]&&j<m[type])return C(i,j,type);
return lucas(i/m[type],j/m[type],type)*C(i%m[type],j%m[type],type)%m[type];
}
void exgcd(ll a,ll b)
{
if(!b){x=;y=;return;}
exgcd(b,a%b);
ll tp=x;x=y;
y=tp-a/b*y;
}
int main()
{
init();
scanf("%lld%lld",&n,&g);
if(g==m[]+){printf("");return ;} //必须判这个!
for(int i=;i*i<=n;i++) if(n%i==) //
for(int j=;j<=;j++)
{
(a[j]+=lucas(n,i,j))%=m[j];
if(i*i!=n)(a[j]+=lucas(n,n/i,j))%=m[j];
}
// ll mod=m[0]; //用中国剩余定理合并:会TLE
// for(int i=1;i<=4;i++)
// {
// exgcd(M[i],m[i]);
// (ans+=M[i]*x%mod*a[i]%mod)%=mod;
// }
// printf("%lld\n",pw(g,ans,mod+1));
ll m0=m[],a0=a[]; //两个两个地合并
for(int i=;i<=;i++)
{
exgcd(m0,m[i]);
x=(x*(a[i]-a0)%m[i]+m[i])%m[i]; //%m[i]
a0+=m0*x; //
m0*=m[i];
}
printf("%lld\n",pw(g,a0,m[]+));
return ;
}
bzoj 1951 [Sdoi2010]古代猪文 ——数学综合的更多相关文章
- BZOJ 1951: [Sdoi2010]古代猪文( 数论 )
显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- 【刷题】BZOJ 1951 [Sdoi2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- bzoj 1951 [Sdoi2010]古代猪文(数论知识)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1951 [思路] 一道优(e)秀(xin)的数论题. 首先我们要求的是(G^sigma{ ...
- bzoj 1951: [Sdoi2010]古代猪文
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
- BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)
题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...
- bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】
首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...
- BZOJ 1951 [SDOI2010]古代猪文 (组合数学+欧拉降幂+中国剩余定理)
题目大意:求$G^{\sum_{m|n} C_{n}^{m}}\;mod\;999911659\;$的值$(n,g<=10^{9})$ 并没有想到欧拉定理.. 999911659是一个质数,所以 ...
- BZOJ 1951: [Sdoi2010]古代猪文 ExCRT+欧拉定理+Lucas
欧拉定理不要忘记!! #include <bits/stdc++.h> #define N 100000 #define ll long long #define ull unsigned ...
随机推荐
- WEB-INF有关的目录路径总结、转向方式: forward 重定向方式: Redirect
WEB-INF有关的目录路径总结 1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提 ...
- 简要总结ajax工作原理及优缺点
虽然在实际的项目中使用多种ajax请求,但就其工作原理,优缺点尚未深入总结, 参考:http://www.cnblogs.com/SanMaoSpace/archive/2013/06/15/3137 ...
- 排序算法(java版)
一直想理解一下基本的排序算法,最近正好在搞java所以就一并了(为了便于理解,这儿都是以从小到大排序为目的) 冒泡排序 也就是比较连续的两个值,如果前面一个值大于后面一个值,则交换. 时间复杂度为O( ...
- javascript(jquery)_匿名函数
一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...
- print webpage
使用浏览器打印网页时(A4纸)有一个固定的尺寸: 高级浏览器: width:700px height:1000px
- python基础4 - 判断(if)语句
6. 判断(if)语句 6.1 if 判断语句基本语法 在 Python 中,if 语句 就是用来进行判断的,格式如下: if 要判断的条件: 条件成立时,要做的事情 …… 注意:代码的缩进为一个 t ...
- Memcache面试题
* memcached是怎么工作的? * memcached最大的优势是什么? * memcached和MySQL的query cache相比,有什么优缺点? * memcached和服务器的loca ...
- python中的list和array的不同之处 2
版权声明:本文为博主非原创文章,未经博主允许可以转载. Python中的list和array的不同之处 python中的list是python的内置数据类型,list中的数据类不必相同的,而a ...
- SSIS之序列容器
序列容器是一种十分简单,但使用非常广泛的容器,它可以对控制流的任务流组件进行结构化处理,把一些业务相关的任务组件,放到一个序列容器中,使整个包看起来更加整洁.美观,就如同我们家里的书柜.衣柜似的,把不 ...
- 【LABVIEW到C#】2》database的操作(一)之 创建access和创建表单
namespace添加如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...