link

求出1到N的阶乘中与M的阶乘互质的数的个数,对R取模,多组询问,R<=10^9+10,T<=10000,1 < = N , M < = 10000000

1到\(M!\)中与\(M!\)互质的数显然为\(\varphi(M)\),由于\(N!\)是\(M!\)的倍数,所以一共有\(\frac {N!}{M!}\)组数,每组数都有\(\varphi(M)\)个数字与\(M!\)互质,所以答案为\(\frac{N!}{M!}\varphi(M!)\)

根据\(\varphi\)的计算式,枚举\(M!\)所有素数计算即可,即1M的素数,显然可以预处理,设n=10000000,由于1n内素数为\(\frac{n}{\ln n}\)个,而每个素数由于需要计算逆元,需要时间为\(O(\log n)\),总复杂度为\(O(n)\),预处理阶乘每次询问直接乘即可,询问复杂度\(O(1)\),预处理复杂度\(O(n)\)

#include <cstdio>
using namespace std; bool vis[10000010];
int prime[10000010], tot, fuck = 10000000;
int prod[10000010], p;
int fac[10000010];
int qpow(int x, int y)
{
int res = 1;
for (x %= p; y > 0; y >>= 1, x = x * (long long)x % p) if (y & 1) res = res * (long long)x % p;
return res;
} int main()
{
int t; scanf("%d%d", &t, &p);
prod[1] = fac[1] = fac[0] = 1;
for (int i = 2; i <= fuck; i++)
{
if (vis[i] == false) prime[++tot] = i, prod[i] = (i - 1) * (long long)qpow(i, p - 2) % p;
else prod[i] = 1;
for (int j = 1; j <= tot && i * prime[j] <= fuck; j++)
{
vis[i * prime[j]] = true;
if (i % prime[j] == 0) break;
}
prod[i] = prod[i] * (long long)prod[i - 1] % p;
fac[i] = i * (long long)fac[i - 1] % p;
}
while (t --> 0)
{
int n, m;
scanf("%d%d", &n, &m);
printf("%d\n", (int)(fac[n] * (long long)prod[m] % p));
}
return 0;
}

38行一遍A

upd:观察了pinkrabbit的题解,发现这么写是错的,对于n>=r的情况,n中的因子r可能会和phi中的逆元消掉(phi中因子没有逆元的假象掩盖了事实)

解决方法类似扩展卢卡斯,记录成\(x*y^b\)的形式。不过感觉出题人不会弄成这么毒瘤,除了你谷的管理员加强数据,就不改了,长个记性就行。。。真相:由于懒癌

最新文章

  1. 进击的Python【第五章】:Python的高级应用(二)常用模块
  2. 百度数据可视化图表套件echart实战
  3. C#程序以管理员权限运行
  4. CAShaperLayer的应用
  5. 【读书笔记】iOS网络-异步请求与运行循环
  6. TJI读书笔记11-多态
  7. 【BZOJ】【1878】【SDOI2009】HH的项链
  8. Android版本控制系统及其间的差异
  9. 通过新的 Azure 媒体服务资源管理器工具管理媒体工作流
  10. 免插件打造wordpress投稿页面
  11. DataTable转化为List
  12. 循环ip段 转载 出处不明
  13. oracle 11g体系结构
  14. Intent传值的学习
  15. 盘点海口最好吃的西餐厅top10
  16. How do I learn machine learning?
  17. _ai_creature
  18. editable : false与 readonly 的区别
  19. 转~Jenkins pipeline:pipeline 使用之语法详解
  20. Intro to Python for Data Science Learning 8 - NumPy: Basic Statistics

热门文章

  1. Maven的Snapshot版本与Release版本
  2. react-router4.x 组件和api介绍
  3. hadoop block大小为128的原因
  4. flask 电影系统(2)
  5. MySQL 删除字段数据某关键字后的所有数据
  6. Tornado之抽屉实战(1)--分析与架构
  7. Mysql学习—查看表结构、修改和删除数据表
  8. shell直接退出后 后台进程关闭的原因和对处
  9. linux 内核移植和根文件系统的制作
  10. C++11新标准:constexpr关键字