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 ...
随机推荐
- Linux的压缩命令(tar,gzip,zip)
打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你 ...
- 20145240 《Java程序设计》第一次实验报告
20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...
- mongodb index 的background 及集群的索引建立
在数据库建立索引时,默认时"foreground" 也就是前台建立索引,但是,当你的数据库数据量很大时,在建立索引的时会读取数据文件,大量的文件读写会阻止其他的操作,此时在建立索引 ...
- mac下查看占用端口的进程及杀死进程
mac lsof -i :9000 kill -9 716
- mybatis 中if标签判断boolean 的写法。
mybatis 的if 比较标签在比较数值时可以这样写: <if test="value=0"> </if> 在比较字符串时可以这么写: <if te ...
- 回溯法之n皇后问题
package main import ( "fmt" "math" ) //判断第k行的某一列放置是否合法 func check(col []int, k i ...
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
items为任意数组
- 查询优化 | MySQL慢查询优化
Explain查询:rows,定位性能瓶颈. 只需要一行数据时,使用LIMIT1. 在搜索字段上建立索引. 使用ENUM而非VARCHAR. 选择区分度高的列作为索引. 采用扩展索引,而不是新建索引 ...
- Redis源码研究:哈希表 - 蕫的博客
[http://dongxicheng.org/nosql/redis-code-hashtable/] 1. Redis中的哈希表 前面提到Redis是个key/value存储系统,学过数据结构的人 ...
- The tag handler class for "c:set"(org.apache.taglibs.standard.tag.rt.core.UrlTag)was not found on the Java Build Path
1.源码: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < ...