求∏i=1n(∑j=1igcd(i,j))mod109+7(n≤5∗107)\prod_{i=1}^n (\sum_{j=1}^igcd(i,j))\mod 10^9+7(n\le 5*10^7)∏i=1n​(∑j=1i​gcd(i,j))mod109+7(n≤5∗107)

本来想出一道莫比乌斯反演的题目的,但是∑\sum∑太简单了,就换成了∏\prod∏试试看,结果发现一些奇怪的东西…

定义f(n)=∑i=1ngcd(i,n)f(n)=\sum_{i=1}^n gcd(i,n)f(n)=∑i=1n​gcd(i,n),则有:

{f(pk)=1(pk−pk−1)+p(pk−1−pk−2)...+pk=k(pk−pk−1)+pk(枚举gcd大小并求出次数)f(n)=f(p)f(q)(p⊥q)\begin{cases} f(p^k)=1(p^k-p^{k-1})+p(p^{k-1}-p^{k-2})...+p^k=k(p^k-p^{k-1})+p^k(枚举gcd大小并求出次数)\\f(n)=f(p)f(q)(p\bot q)\end{cases}{f(pk)=1(pk−pk−1)+p(pk−1−pk−2)...+pk=k(pk−pk−1)+pk(枚举gcd大小并求出次数)f(n)=f(p)f(q)(p⊥q)​

第二个式子是证明它是积性函数的:

令n=pcqd(p⊥q)n=p^c q^d(p\bot q)n=pcqd(p⊥q),则需要证明∑i=1ngcd(i,n)=∑j=1pcgcd(pc,j)∑k=1qdgcd(qd,k)\sum_{i=1}^n gcd(i,n)=\sum_{j=1}^{p^c} gcd(p^c,j)\sum_{k=1}^{q^d} gcd(q^d,k)∑i=1n​gcd(i,n)=∑j=1pc​gcd(pc,j)∑k=1qd​gcd(qd,k).

此时我们计算一下paqb(a≤c,b≤d)p^aq^b(a\le c,b\le d)paqb(a≤c,b≤d)作为gcd的出现次数.

从左边看则为npaqb−⌊npa+1qb⌋−⌊npaqb+1⌋+⌊npa+1qb+1⌋\dfrac{n}{p^aq^b}-\lfloor\dfrac{n}{p^{a+1}q^b}\rfloor-\lfloor\dfrac{n}{p^aq^{b+1}}\rfloor+\lfloor\dfrac{n}{p^{a+1}q^{b+1}}\rfloorpaqbn​−⌊pa+1qbn​⌋−⌊paqb+1n​⌋+⌊pa+1qb+1n​⌋.

从右边看则为(pc−a−⌊pc−a−1⌋)(qd−b−⌊qd−b−1⌋)(p^{c-a}-\lfloor p^{c-a-1}\rfloor)(q^{d-b-\lfloor q^{d-b-1}\rfloor})(pc−a−⌊pc−a−1⌋)(qd−b−⌊qd−b−1⌋).

很明显,拆开后是等价的.

那么我们只要求出f(pk)f(p^k)f(pk)及其出现次数,用一下快速幂即可.

本算法的瓶颈在于线性筛,因为快速幂是高度压缩了运算次数.

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=1e9+7,N=5e7+10;
ll ans;
ll power_mod(ll a,ll b) {ll c=1;a%=mod;while(b) {if(b&1)c=c*a%mod;a=a*a%mod;b=b>>1;}return c;
}
void calc(int x,ll y,ll p) {int cnt=0;do {x/=p;cnt++;ans=ans*power_mod(y*p+cnt*y*(p-1),x-x/p)%mod;y*=p;}while(x>=p);
}
int n,prime[3001144],tot;bool v[N];
void get_prime() {for(int i=2;i<=n;i++) {if(!v[i])prime[++tot]=i,calc(n,1,i);for(int j=1;i*prime[j]<=n;j++) {v[i*prime[j]]=1;if(i%prime[j]==0)break;}}
}
int main() {//  freopen("a.in","r",stdin);
//  freopen("a.out","w",stdout);scanf("%d",&n);ans=1;get_prime();printf("%lld\n",ans);return 0;
}

caioj 1290: 之乎者也相关推荐

  1. MYSQL 创建用户1290错误_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290

    不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...

  2. linux时mysql报1290_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290

    不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...

  3. mysql导出 error1290_解决MySQL导出数据到文件报错:ERROR 1290

    环境: MySQL 8.0 操作: 1. 使用SELECT .. INTO OUTFILE ,想把数据导出到txt文件中,报如下错误: ERROR 1290 (HY000): The MySQL se ...

  4. 解决关于 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it....报错

    mysql> create user 'zhilong'@'%' identified by '123456'; ERROR 1290 (HY000): The MySQL server is ...

  5. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)

    http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...

  6. LeetCode Algorithm 1290. 二进制链表转整数

    1290. 二进制链表转整数 Ideas 偷了个懒,首先用string类型的str把链表的所有元素都串起来,然后直接用stoi转成int类型,直接AC. Code C++ #include <s ...

  7. mysql error 1148_MYSQL入坑第一弹--------ERROR 1148 (42000)ERROR 1290 (HY000)

    这是因为: 服务器端,local_infile默认开启:客户端,local_infile默认关闭,因此用的时候需要打开. On the server side: The local_infile sy ...

  8. mysql创建用户报错ERROR 1290

    使用navicat 给mysql创建用户报错ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv op ...

  9. mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案

    错误出现情景 在cmd中使用mysql命令,学生信息表添加数据.使用load data方式简单批量导入数据. 准备好文本数据: xueshengxinxi.txt 文件  数据之间以tab键进行分割 ...

  10. LeetCode篇之链表:1290(二进制链表转整数)

    LeetCode篇之链表:1290-->二进制链表转整数 1290. 二进制链表转整数 题目: 解题思路: 源码: 改进: 踩坑点: 1290. 二进制链表转整数 题目: 解题思路: 1.先遍历 ...

最新文章

  1. 可视化调试工具gdb-dashboard
  2. R语言使用randomForest包构建随机森林模型的步骤和流程、随机森林算法包括抽样样本(观察)和变量来创建大量的决策树(多个树,构成了森林,而且通过样本抽样和变量抽样,让多个树尽量不同)
  3. 基于OEP30WD类音频功率放大器驱动电磁铁--以失败告终
  4. BUUCTF(pwn)not_the_same_3dsctf_2016
  5. 白帽子讲web安全——认证与会话管理
  6. 物联网摄像机通讯_网络调试助手
  7. Postfix 电子邮件系统精要
  8. bzoj 1009: [HNOI2008]GT考试
  9. React Native 接入微博、微信、QQ 登录功能
  10. 嵌入式软件工程师岗位笔试、面试题(1)
  11. 计算力学——有限元编程实现
  12. 闲聊,从《斗罗大陆》到游戏开发
  13. 渗透测试-不死马的创建和查杀
  14. 硕士毕业论文写不出来导致严重焦虑,怎么办?
  15. 考北航计算机英语考几,往届生跨考北航计算机经验心得
  16. css零到一基础教程006:CSS 颜色
  17. 华为鸿蒙系统启示,华为的机遇——鸿蒙系统启示录
  18. 功率半导体芯片是什么_LED日光灯与传统日光灯之间有什么区别和优势呢?
  19. Extjs 扩展Htmleditor,支持 图片上传 文件上传 插入flash 插入多媒体 插入层 插入横线等功能
  20. 剑指Offer面试算法题Java实现

热门文章

  1. eclipse指定jsp的默认打开方式
  2. ioncube加密与解密 php代码
  3. 到处都在说直播连麦技术,它们真的能连吗?
  4. sticky粘性定位
  5. 鸿蒙系统图标显示下划线,用鸿蒙OS在蜂鸣器上播放一曲《两只老虎》
  6. Keil5新建工程小白指南
  7. get busy trying or get busy dying
  8. Android学习日记(yzy):显示application并调用
  9. CPU 是怎么认识代码的?
  10. .Net Entity Framework Core 设置浮点数精度