题意:互质的数的个数,其中

分析:因为,所以,我们很容易知道如下结论

   对于两个正整数,如果的倍数,那么中与互素的数的个数为

     本结论是很好证明的,因为中与互素的个数为,又知道,所以

结论成立。那么对于本题,答案就是

事实上只要把素数的逆元用exgcd求一求就好,其余并未用到

逆元递推法:

#include<stdio.h>
#include<string.h>
const int N=1e7+;
typedef long long ll;
int pr[N],p[N],cnt,mod;
int inv[N],ans1[N],ans2[N];
int read()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
void init(){
ans1[]=ans2[]=inv[]=;
for(int i=;i<N;i++){
ans1[i]=(ll)ans1[i-]*i%mod;
if(!p[i])
pr[++cnt]=i;
for(int j=;j<=cnt&&i*pr[j]<N;j++){
p[pr[j]*i]=;
if(i%pr[j]==) break;
}
}
for(int i=;i<N&&i<mod;i++){
inv[i]=(mod-(ll)mod/i)*inv[mod%i]%mod;
}
for(int i=;i<N;i++){
ans2[i]=ans2[i-];
if(!p[i])
ans2[i]=(ll)ans2[i]*(i-)%mod*inv[i%mod]%mod;
}
}
int main(){
int t,n,m;
scanf("%d%d",&t,&mod);
init();
while(t--){
n=read();m=read();
printf("%d\n",(ll)ans1[n]*ans2[m]%mod);
}
return ;
}

扩展欧几里德求逆元

#include<stdio.h>
#include<string.h>
const int N=1e7+;
typedef long long ll;
int pr[N],p[N],cnt,mod;
int inv[N],ans1[N],ans2[N];
int read()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
int ex_gcd(int a,int b,int &x,int &y){
if(!b){
x=,y=;
return a;
}
int ans=ex_gcd(b,a%b,y,x);
y-=a/b*x;
return ans;
}
int getinv(int i){
int x,y;
ex_gcd(i,mod,x,y);
x=((x%mod)+mod)%mod;
return x;
}
void init(){
ans1[]=ans2[]=inv[]=;
for(int i=;i<N;i++){
ans1[i]=(ll)ans1[i-]*i%mod;
if(!p[i])
pr[++cnt]=i,inv[i]=getinv(i);
for(int j=;j<=cnt&&i*pr[j]<N;j++){
p[pr[j]*i]=;
if(i%pr[j]==) break;
}
}
for(int i=;i<N;i++){
ans2[i]=ans2[i-];
if(!p[i])
ans2[i]=(ll)ans2[i]*(i-)%mod*inv[i%mod]%mod;
}
}
int main(){
int t,n,m;
scanf("%d%d",&t,&mod);
init();
while(t--){
n=read();m=read();
printf("%d\n",(ll)ans1[n]*ans2[m]%mod);
}
return ;
}

http://hzwer.com/5863.html

http://blog.csdn.net/acdreamers/article/details/8220787

BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】的更多相关文章

  1. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  2. 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

  3. [BZOJ 2186] [Sdoi2008] 沙拉公主的困惑 【欧拉函数】

    题目链接:BZOJ - 2186 题目分析 题目要求出 [1, n!] 中有多少数与 m! 互质.(m <= n) 那么在 [1, m!] 中有 phi(m!) 个数与 m! 互质,如果一个数 ...

  4. [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2186 分析: 就是要求1~n!中与m!互质的数的个数 首先m!以内的就是φ(m!) 关 ...

  5. bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...

  6. bzoj 2186: [Sdoi2008]沙拉公主的困惑

    #include<cstdio> #include<iostream> #define ll long long #define N 10000009 using namesp ...

  7. BZOJ 2186 SDOI2008 沙拉公主的困惑 数论

    题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...

  8. bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数

    n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...

  9. 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

随机推荐

  1. Rendering Problems: No Android SDK found. Please configure an Android SDK. 怎解决?

    Rendering Problems No Android SDK found. Please configure an Android SDK.

  2. 开启Windows Server 2008 R2上帝模式

    TAG标签: 摘要:这个“God Mode” 应该大部分的网友都听过了,只是在 Windows Server 2008 R2 上也支持此一功能.启用方式非常简单,在桌面新建一个文件夹,命名为: God ...

  3. PHP写日志函数

    初学,写一个函数用于存储日志调试. function WriteLog($msg) { $filename = dirname(__FILE__) ."\\Debug.log"; ...

  4. SharePoint 2013 "通知我"功能简介

    功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是Sh ...

  5. Linux平台Makefile文件的编写基础入门(课堂作业)

    根据老师的要求,写一个超简单的makefile准备:       准备三个文件:file1.c, file2.c, file2.h       file1.c: #include "file ...

  6. Android文件操作

    将数据写入Internal Storage: String fileName = "myfile.txt"; String str="保存数据到内部存储"; t ...

  7. 得到设备是何种iPhone设备 + 怎么获得启动页面图片

    一.前言 今天做一个功能,需要动态的获得启动页,然后根据不同设备去使用不用的启动页图片. 二.正文 常规来说,我们直接判断是何种设备,然后通过name去获得图片选择性加载即可.但是实际上遇到的两个问题 ...

  8. IOS 网络浅析-(六 网络图片获取之三方SDWebImage)

    网络图片获取是大多数app所能用到的,由于实际app开发中原生api很少用到,在这里就先不介绍了,以后有时间会给大家介绍.这篇文章会给大家介绍一个三方-SDWebImage.SDWebImage 是一 ...

  9. Regex Expression的资料和笔记整理

    维基百科:http://en.wikipedia.org/wiki/Regular_expression 正则表达式在线测试:http://tool.chinaz.com/regex/ 正则表达式,常 ...

  10. win7共享文件夹给局域网

    1.设置共享   2.关闭"需要密码访问"