挺有趣的恩:洛谷P2155

在纸上打打草稿,写出n!个数,从先往后,遇到不互质的就筛掉——发现一个奇妙的性质!:筛掉的次数、顺序好像是周期性出现的呢~

而且更加妙妙的是,好像还是m!一轮..那么因为n!一定能被m!整除,所以问题转变为:(n!\m! - 有多少个循环节)*(φ(m))。

接下来,φ(m) = m!*(1 - 1/p1)*(1 - 1/p2)...任务就只剩下打出阶乘表&逆元啦。离线的处理会快很多。

#include <bits/stdc++.h>
using namespace std;
#define maxn 10000050
#define ll long long
#define int long long
int maxx, now = 1, P, T, tot, inv[maxn], ans[10050], pri[maxn],fac_a[maxn], fac_b[maxn], fac_c[maxn];
bool is_prime[maxn];
struct query
{int n, m, id, pri;
}Q[10050];int read()
{int x = 0;char c;c = getchar();while(c < '0' || c > '9') c = getchar();while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x;
}bool cmp1(query a, query b)
{return a.m < b.m;
}int Get_Pri(int n)
{for(int i = 2; i <= n; i ++){if(!is_prime[i]){pri[++ tot] = i;while(now <= T && pri[tot] > Q[now].m){Q[now].pri = tot - 1;now ++;}  }while(now <= T && i == n){Q[now].pri = tot;now ++;}for(int j = 1; j <= tot; j ++){if(i * pri[j] > n) break;is_prime[i * pri[j]] = 1;if(!(i % pri[j])) break;}}
}int Get_fac(int n)
{fac_a[0] = fac_a[1] = fac_b[0] = fac_b[1] = fac_c[0] = fac_c[1] = 1;inv[0] = inv[1] = 1;for(int i = 2; i <= n; i ++){fac_a[i] = (fac_a[i - 1] * i) % P;inv[i] = ((P - P / i) * inv[P % i]) % P;}for(int i = 1; i <= tot; i ++){fac_b[i] = inv[pri[i]];fac_b[i] = (fac_b[i] * fac_b[i - 1]) % P;fac_c[i] = pri[i] - 1;fac_c[i] = (fac_c[i] * fac_c[i - 1]) % P;}
}signed main()
{T = read(), P = read();for(int i = 1; i <= T; i ++){Q[i].n = read(), Q[i].m = read(), Q[i].id = i;maxx = max(maxx, max(Q[i].n, Q[i].m));}sort(Q + 1, Q + 1 + T, cmp1);Get_Pri(maxx);Get_fac(maxx);for(int i = 1; i <= T; i ++)ans[Q[i].id] = ((fac_a[Q[i].n] * fac_b[Q[i].pri]) % P * fac_c[Q[i].pri]) % P;for(int i = 1; i <= T; i ++)printf("%lld\n", ans[i]);return 0;
}

转载于:https://www.cnblogs.com/twilight-sx/p/8416225.html

【题解】SDOI2008莎拉公主的困惑相关推荐

  1. bzoj2186 莎拉公主的困惑 积性函数

    这个题其实就是考察了积性函数phi的一些性质 首先,phi(2)*4=phi(8):∴ phi(P)*P^n=phi(P*P^n) 所以 phi(2*3*4)=phi(2*4)*phi(3)=phi( ...

  2. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...

  3. φ(1)=1 [Sdoi2008]沙拉公主的困惑

    问题 F: [Sdoi2008]沙拉公主的困惑 时间限制: 1 Sec 内存限制: 259 MB 题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘 ...

  4. bzoj2186【SDOI2008】沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec   Memory Limit: 259 MB Submit: 2363   Solved: 779 [ Submi ...

  5. 【bzoj2186】[Sdoi2008]沙拉公主的困惑 欧拉函数

    题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...

  6. bzoj 2186: [Sdoi2008]沙拉公主的困惑

    Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2463  Solved: 820 [Submit][Status][Discuss] Descrip ...

  7. [Sdoi2008]沙拉公主的困惑

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  8. 题解 洛谷P2147/BZOJ2049【[SDOI2008]洞穴勘测】

    Link-Cut-Tree的模板题啊......(听说还可以用其他的方法做,不管了,直接上LCT) 没有要求维护点权,只需要维护点的连通性即可. 就是朴素的LCT,居然还不要pushup. 感觉有些不 ...

  9. 【题解】Luogu P2147 [SDOI2008]洞穴勘测

    原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 我不太会踩爆Link-Cut-Tree的并查集做法qaq 我们用Link-Cut-Tree维护连通性(十分无脑) Co ...

最新文章

  1. 前端校招准备--HTTP相关面试题总结
  2. 《系统集成项目管理工程师》必背100个知识点-48质量控制的老七工具和新七工具...
  3. PIC单片机入门_MPLAB 集成开发环境和 MPASM编译器
  4. linux共享 smb3.0,区块链3.0_精通Hyperledger之Samba使用(4)
  5. 世粮署:马斯克、贝索斯等富豪应捐出部分资产缓解全球饥饿
  6. linux命令(一)查看进程的线程数top,ps
  7. C语言程序设计型考册作业1,C语言程序设计作业 求解答
  8. easyui省市二级联动
  9. 验证码识别,打码平台
  10. 计算机服务器安装系统安装教程,Windows Server操作系统安装教程
  11. uni-app银行卡卡号验证
  12. 海尔电商峰值系统架构设计最佳实践
  13. 数学在计算机方面的应用论文参考文献,数学论文参考文献
  14. 【100题】给定入栈序列,判断一个序列是否可能为输出序列
  15. 【http-flv】zlmedia http 客户端拉取 http-flv 流程
  16. CSDN博客 论坛——读好书,畅想 我的IT成长路 活动【已完成】
  17. C++:实现量化SMM Caplet均匀校准测试实例
  18. html获取数组的前三个元素,web前端:js 获取数组最后一个元素
  19. 【田姓】宗谱——【名人精粹】
  20. 周期信号的傅里叶级数展开

热门文章

  1. CF 1093G Multidimensional Queries——线段树(消去绝对值符号)
  2. django-重写登录认证(可以使用用户名或手机号登录)
  3. 行业牛人和开源软件改变技术世界
  4. 常用的简单排序之插入排序,冒泡排序,选择排序,希尔排序
  5. 新安装和已安装nginx如何添加未编译安装模块/补丁
  6. ajax查询数据的举例
  7. 关于项目中的日期提交
  8. Win7无线网络共享设置方法
  9. oracle10g 开机自启动
  10. Android Studio下载及安装3.0版本