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 ...
随机推荐
- dll和lib
lib:里面包含了很多源代码,工程会将这些源代码加入自己的项目中编译: dll:动态编译库,允许可执行文件在运行中加载里面的资源. 使用lib需注意两个文件:(1).h头文件,包含lib中说明输出的类 ...
- Gitblit搭建及Git协作开发流程
1. 概述 目前主流的是git作为自己代码管理,但是采用github需要付费才能够使用,如果不付费,代码需要公开.创业团队及小型开发团队都有必要搭建自己的代码服务器,自己摸索需要一定的时间,会赶不及项 ...
- phpMyAdmin中config.inc.php设置密码和修改密码的方法
phpMyAdmin有3种授权模式: 1. cookie: 显示一个web登录页面,输入mysql的用户名和密码,然后进入管理界面. $cfg['Servers'][$i]['auth_type'] ...
- ubuntu 的mysql 安装过程和无法远程的解决方案
ubuntu 的mysql 安装过程和无法远程的解决方案 安装完mysql-server启动mysqlroot@ubuntu:# /etc/init.d/mysql start (如果这个命令不可以, ...
- Spring Cloud Stream消息总线
Springcloud 里面对于MQ的整合一个是前一篇的消息总线一个是本文介绍的消息驱动 大体要学习这么几个知识点: 课题:SpringCloud消息驱动Stream1.什么是SpringCloud消 ...
- hive学习7(条件函数case)
case函数 语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END 说明:如果a为TRUE,则返回b:如果c为TRUE,则返回d:否则返回e 实例 ...
- HDFS相关概念
数据块 每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位.构建与单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的快.该文件系统块的大小可以使磁盘块的整数倍.文件系统块一般为几千字节,而 ...
- ios点击事件失效
当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. 解决办法有 ...
- JavaScript -- 正则表达式 检验表单提交的内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 从配置maven环境到maven项目的新建
话不多说,直接入正题. 一.配置maven 环境 首先安装最新版支持javaee的eclipse.我这里下载的版本是eclipse-jee-mars-2-win32-x86_64的新版(我是2017年 ...