BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】
题意:求中
互质的数的个数,其中
。
分析:因为,所以
,我们很容易知道如下结论
对于两个正整数和
,如果
是
的倍数,那么
中与
互素的数的个数为
本结论是很好证明的,因为中与
互素的个数为
,又知道
,所以
结论成立。那么对于本题,答案就是
事实上只要把素数的逆元用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://blog.csdn.net/acdreamers/article/details/8220787
BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】的更多相关文章
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
- 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
- [BZOJ 2186] [Sdoi2008] 沙拉公主的困惑 【欧拉函数】
题目链接:BZOJ - 2186 题目分析 题目要求出 [1, n!] 中有多少数与 m! 互质.(m <= n) 那么在 [1, m!] 中有 phi(m!) 个数与 m! 互质,如果一个数 ...
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2186 分析: 就是要求1~n!中与m!互质的数的个数 首先m!以内的就是φ(m!) 关 ...
- bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...
- bzoj 2186: [Sdoi2008]沙拉公主的困惑
#include<cstdio> #include<iostream> #define ll long long #define N 10000009 using namesp ...
- BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...
- 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
随机推荐
- [python拾遗]列表
python列表拾遗 1.列表可以修改,使用 ‘+’ 将一个新列表附加在原列表的尾部: >>> a = [1,'a'] >>> b = a + [2,'b'] &g ...
- Linux 安装 Nginx
1. nginx的安装: 开始学习如何安装nginx,首先安装必要的软件: # yum install libtool # yum install -y gcc-c++ # yum install z ...
- 开源项目Foq简介
Foq是一个轻量级-线程安全的mocking类库.使用它来mock抽象类与接口这是我们通常的做法.Foq的名字来自Moq,如果你使用过Moq的话,自然后联想到它能做什么.Foq主要是为了F#的 ...
- <input type="text"/>未输入时属性value的默认值--js学习之路
在百度ife刷题是自己的一个错误引发了我对<input type="text"/>的学习. 先贴代码: <!DOCTYPE html> <html&g ...
- Virtual DOM 算法
前端 virtual-dom react.js javascript 目录: 1 前言 2 对前端应用状态管理思考 3 Virtual DOM 算法 4 算法实现 4.1 步骤一:用JS对象模拟DOM ...
- 实现跨域的N种方法
从域说起 域: 域是WIN2K网络系统的安全性边界.我们知道一个计算机网最基本的单元就是"域",这一点不是WIN2K所独有的,但活动目录可以贯穿一个或多个域.在独立的计算机上,域即 ...
- CRM 2013 安装前系统和数据库的基础配置
Win Serer 2012 域控安装参考:http://smallc.blog.51cto.com/926344/1034868 (其中最重要的几步:创建域控(ActiveDirectory域服务 ...
- arcgis python 更新顺序号
i = 0def myFun(): global i i=i +1 return i myFun() ========================== accumulate( ) total = ...
- SharePoint通过stsadm备份和还原子网站(不是网站集)
大家都知道SharePoint的stsadm命令提供了很多便捷甚至是唯一的操作方法! 这里列出的所有命令:http://www.cnblogs.com/dadongzuo/archive/2013/0 ...
- 查看一个软件ipa包的内容
1.打开itunes 下载你要用的app 把ipa文件拉到桌面上 然后进行压缩