lg最优解来写题解啦(

题目大意:

多测:

\[\sum_{i=1}^{n!}[\gcd(i,m!)=1]
\]

根据 \(\gcd\) 的结论,我们可以得到答案其实是:

\[\frac {n!} {m!} \times \varphi(m!)
\]

恩,然后我们就可以直接做了

预处理 \(n!\) 及其逆元,以及 \(\varphi(n!)\)。

那么怎么得到 \(\varphi(n!)\) 呢?考虑从 \(\varphi((n-1)!)\) 递推过来。

注意到 \(n!\) 有一个性质,就是其为所有不大于 \(n\) 的质数的倍数。也就是说 \(\varphi(n!)\) 可以写成:

\[\prod_p^n \varphi(p^k)
\]

其中所有的 \(k\) 一定都不小于 \(1\)。

分类讨论一下:

  1. 当 \(n\) 为质数时,\(\varphi(n!)=\varphi((n-1)!) \times (n-1)\)
  2. 当 \(n\) 不为质数时,\(\varphi(n!)=\varphi((n-1)!) \times n\)

于是可以递推得到 \(\varphi(n!)\)。

那么对于前面的那个分数,都知道当 \(n \geq mod\) 并且 \(m \geq mod\) 时是不能直接算的,因为 \(n!\) 中的 \(mod\) 和 \(m!\) 中的 \(mod\) 有可能会抵消掉。

于是在递推阶乘的时候可以特判一下,当 \(i=mod\) 时直接令 \(n!=(n-1)!\)。

在计算的时候再判断一下 \(\lfloor \frac n {mod} \rfloor\) 是否等于 \(\lfloor \frac m {mod} \rfloor\) 就可以避免这个问题了。

复杂度为 \(O(n+T)\)。

code:

#include<cstdio>
typedef __uint128_t L;
typedef unsigned long long ull;
const int M=1e7+5;
int T,P,mx,top,n[10005],m[10005],pri[M],phi[M],fac[M],ifac[M];bool zhi[M];
struct FastMod{
ull b,m;
FastMod(ull b):b(b),m(ull((L(1)<<64)/b)){}
friend inline ull operator%(const ull&a,const FastMod&mod){
ull q=(L(mod.m)*a)>>64;
ull r=a-q*mod.b;
return r>=mod.b?r-mod.b:r;
}
}mod(2);
signed main(){
register int i,j,x;
scanf("%d%d",&T,&P);phi[1]=fac[1]=ifac[1]=1;mod=FastMod(ull(P));
for(i=1;i<=T;++i)scanf("%d%d",n+i,m+i),mx=n[i]>mx?n[i]:mx,mx=m[i]>mx?m[i]:mx;
for(i=2;i<=mx;++i){
if(!zhi[i])pri[++top]=i,phi[i]=1;
for(j=1;j<=top&&(x=i*pri[j])<=M;++j){
zhi[x]=true;if(!(i%pri[j]))break;
}
phi[i]=i-phi[i];
}
for(i=2;i<=mx;++i){
if(i^P)fac[i]=1ull*fac[i-1]*i%mod,ifac[i]=1ull*(P-P/i)*ifac[P%i]%mod;
else fac[i]=fac[i-1],ifac[i]=1;
}
for(i=2;i<=mx;++i)phi[i]=1ull*phi[i-1]*phi[i]%mod,ifac[i]=1ull*ifac[i-1]*ifac[i]%mod;
for(i=1;i<=T;++i)printf("%d\n",n[i]-n[i]%P==m[i]-m[i]%P?1ull*fac[n[i]]*ifac[m[i]]%mod*phi[m[i]]%mod:0);
}

LGP2155题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. LBS应用之 根据一点的经纬度实现附近点的查询

    这年头和LBS相关的应用越来越火.从foursquare的热闹程度就可见一般(什么,没听过 foursquare-. 哥们,你 out 了).和 LBS有关的应用一般都包括一些共同的操作,最常见的一个 ...

  2. k8s之list-watch机制、节点调度以及亲和性

    k8s之list-watch机制.节点调度以及亲和性 目录 k8s之list-watch机制.节点调度以及亲和性 一.list-watch机制 1. list-watch介绍 2. list-watc ...

  3. 他人学习Python感悟

    作者:王一 链接:https://www.zhihu.com/question/26235428/answer/36568428 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  4. Spring Security 介绍

    Spring Security介绍 开源 提供企业级的安全认证和授权 Spring安全拦截器 认证管理器 认证模式 Basic HTTP 1.0中使用的认证方法,使用用户名和密码Base64编码的方式 ...

  5. 手把手教你实现pynq-z2条形码识别

    我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号,拉你进"IC设计交流群". 1.前言 单单实现一个二维码识别就花了将近一个星期,这篇文章我就 ...

  6. Java架构师必备技能:docker使用大全

    前言   java工程师成长为架构师是一个艰难且耗费心力的过程,不仅仅需要熟悉java体系内相关的技术,同时要掌握许多运维相关的操作技能,随着k8s逐渐成为微服务持续集成开发难以越过的基础设施之后,d ...

  7. [LeetCode]20.有效的括号(Java)

    原题地址: valid-parentheses 题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类 ...

  8. unity3d导出xcode项目使用afnetworking 3框架导致_kUTTagClassMIMEType 问题解决方案

    http://blog.csdn.net/huayu_huayu/article/details/51781953  (参考链接) Undefined symbols for architecture ...

  9. k8s核心资源之:标签(label)

    简介 label是标签的意思,一对 key/value ,被关联到对象上,k8s中的资源对象大都可以打上标签,如Node.Pod.Service 等 一个资源可以绑定任意多个label,k8s 通过  ...

  10. AWVS漏洞扫描教程之扫描方式

    实验目的 掌握AWVS的基本用法. 实验原理 Acunetix Web Vulnerability Scanner是一个网站及服务器漏洞扫描软件. 实验内容 对Web站点进行安全测试. 实验环境描述 ...