SDOI 2008沙拉公主的困惑
来源:互联网 发布:python mako 编辑:程序博客网 时间:2024/04/29 11:54
星期四, 23. 二月 2017 05:10下午
SDOI 2008沙拉公主的困惑
题目大意
求1-N!中与M!互质的数的个数;
思路
参考神犇の博客
所以我们可以将N!分为
那么 根据这个性质,就可以得到等式
sum=
=
=N!
先预处理出N!和
#include <cstdio>#include <algorithm>#include <cmath>#define max(a,b) a>b?a:busing namespace std;typedef long long LL;const int MAXN = 10000000+50;const int N = 10000+50;int fac[MAXN],sum[MAXN],inv[MAXN],num;int t,mod,A[N],B[N],maxn;int prime1[MAXN];bool prime[MAXN];void Read(int &);void init(int Maxn){ Maxn++; sum[1]=1,fac[1]=1,inv[1]=1; for(int i=2;i<Maxn;i++){ if(!prime[i]) prime1[++num]=i; for(int j=1;j<=num && i*prime1[j]<Maxn;j++){ prime[i*prime1[j]]=1; if(i%prime1[j]==0) break; } } //线性筛函数 for(int i=2;i<=Maxn;i++) { sum[i]=((LL)sum[i-1]*i%mod)%mod; //预处理阶乘 if(i<mod) inv[i]=(LL)(mod-mod/i)%mod*inv[mod%i]%mod;//预处理逆元 if(!prime[i]) fac[i]=(LL)fac[i-1]*(i-1)%mod*inv[i%mod]%mod; else fac[i]=fac[i-1]; } //改成三个循环TLE3个点;}int main(){ Read(t),Read(mod); for(int i=1;i<=t;i++) Read(A[i]),Read(B[i]),maxn=max(maxn,A[i]); init(maxn); for(int i=1;i<=t;i++) printf("%lld\n",(LL)fac[B[i]]*sum[A[i]]%mod); return 0;}void Read(int &in){ static char ch; for(ch=getchar();ch>'9'||ch<'0';ch=getchar()) ; for(in=0;ch>='0'&&ch<='9';ch=getchar()) in=in*10+ch-'0';}
0 0
- SDOI 2008沙拉公主的困惑
- BZOJ 2186 SDOI 2008 沙拉公主的困惑 数论
- 沙拉公主的困惑 cash
- BZOJ2186沙拉公主的困惑
- bzoj2186沙拉公主的困惑
- [Sdoi2008]沙拉公主的困惑
- [SDOI2008]沙拉公主的困惑
- 【Bzoj2186】沙拉公主的困惑
- bzoj 2186: [Sdoi2008]沙拉公主的困惑
- 【bzoj 2186】: [Sdoi2008]沙拉公主的困惑
- 【BZOJ】2186 沙拉公主的困惑
- 【bzoj2186】【sdoi2008】【沙拉公主的困惑】【数论】
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186【SDOI2008】沙拉公主的困惑
- 【SDOI2008】【BZOJ2186】沙拉公主的困惑
- bozj2186 [Sdoi2008]沙拉公主的困惑
- [BZOJ2186][Sdoi2008]沙拉公主的困惑
- mouseout() 方法和mouseleave() 方法的不同
- 自学Python day6--------面向对象编程(类和实例)
- Codeforces 550C
- Laravel 读取 config 下的数据
- 算法导论 CH01 The Role of Algorithms in Computing
- SDOI 2008沙拉公主的困惑
- 28、利用递归计算自然数 n 的阶乘
- 第七章课后简答题
- Session
- HTML li如何垂直居中
- 疾病管理
- Android集成环信easeui,设置圆形头像,修改气泡和扩展栏,跳过打包冲突
- matlab svd分解
- 强类型语言与弱类型语言