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

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

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

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

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

事实上只要把素数的逆元用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. 关于领域驱动设计(DDD)仓储的思考

    为什么需要仓储呢?领域对象(一般是聚合根)的被创建出来后的到最后持久化到数据库都需要跟数据库打交道,这样我们就需要一个类似数据库访问层的东西来管理领域对象.那是不是我们就可以设计一个类似DAL层的东东 ...

  2. Python for循环内部实现的一个sample

    #!/usr/bin/env python # -*- coding: utf-8 -*- it = iter([1,2,3,4,5]) while True: try: x = next(it) p ...

  3. tomcat学习笔记一:安装和配置

    安装 配置环境: win7 + centos7虚拟机 安装步骤: 到http://tomcat.apache.org/下载最新的tomcat安装包(8.0.24) 移到对应的目录并解压 安装问题: 安 ...

  4. Sass学习之路(2)——Sass环境安装(windows版)

    因为本喵目前用的是window10的本子,所以这里就发windows版本的安装流程啦.(希望有朋友可以赞助我一个mac(┳_┳)): 第一步:安装ruby 因为Sass是基于ruby编写的,所以先去官 ...

  5. android sdk无法更新或者更新缓慢的解决方案

    win7安装android sdk老出 Fetching https://dl-ssl.google.com/android/repository/addon .这是android sdk不能连接到谷 ...

  6. vh属性-- 一个永远垂直居中的弹出框

    下面的demo,无论浏览器大小如何改变,滚动条是否滚动,弹出框永远水平垂直居中 <html> <head> <title></title> </h ...

  7. 数据库表-DD01L DD02L DD03L-保存数据表和域的消息

    DD01L 定义域 DD02L SAP-表,记录每张数据库表和自定义表的表相关信息 DD03L 定义字段,记录数据表和自定义表中每个字段相关信息

  8. 读取XML绑定TreeNode

    <asp:TreeView ID="treeview" OnClick="TreeViewCheckBox_Click()" runat="se ...

  9. GitHub 基本常用知识解答

    1.Fork.Watch.Star 是什么意思? fork的意思是从别人的代码库中复制一份到你自己的代码库,与普通的复制不同,fork包含了原有库中的所有提交记录, fork后这个代码库是完全独立的, ...

  10. Android多媒体录制--MediaRecorder视频录制

    Android使用MediaRecorder类进行视频的录制. 需要注意,使用MediaRecorder 录音录像 的设置代码步骤一定要按照API指定的顺序来设置,否则报错 步骤为: 1.设置视频源, ...