caioj 1290: 之乎者也
求∏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=1igcd(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=1ngcd(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=1ngcd(i,n)=∑j=1pcgcd(pc,j)∑k=1qdgcd(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: 之乎者也相关推荐
- MYSQL 创建用户1290错误_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...
- linux时mysql报1290_rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...
- mysql导出 error1290_解决MySQL导出数据到文件报错:ERROR 1290
环境: MySQL 8.0 操作: 1. 使用SELECT .. INTO OUTFILE ,想把数据导出到txt文件中,报如下错误: ERROR 1290 (HY000): The MySQL se ...
- 解决关于 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 ...
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...
- LeetCode Algorithm 1290. 二进制链表转整数
1290. 二进制链表转整数 Ideas 偷了个懒,首先用string类型的str把链表的所有元素都串起来,然后直接用stoi转成int类型,直接AC. Code C++ #include <s ...
- mysql error 1148_MYSQL入坑第一弹--------ERROR 1148 (42000)ERROR 1290 (HY000)
这是因为: 服务器端,local_infile默认开启:客户端,local_infile默认关闭,因此用的时候需要打开. On the server side: The local_infile sy ...
- mysql创建用户报错ERROR 1290
使用navicat 给mysql创建用户报错ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv op ...
- mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案
错误出现情景 在cmd中使用mysql命令,学生信息表添加数据.使用load data方式简单批量导入数据. 准备好文本数据: xueshengxinxi.txt 文件 数据之间以tab键进行分割 ...
- LeetCode篇之链表:1290(二进制链表转整数)
LeetCode篇之链表:1290-->二进制链表转整数 1290. 二进制链表转整数 题目: 解题思路: 源码: 改进: 踩坑点: 1290. 二进制链表转整数 题目: 解题思路: 1.先遍历 ...
最新文章
- Swift 闭包表达式
- MFC实现获取鼠标位置的小程序
- POJ - 3259 Wormholes(判断负环)
- if ( document.all ) 可以简单的判断浏览器是否IE浏览器?
- 520,一份给程序员的“硬核”脱单秘籍
- 从Retrofit的源码来看 HTTP
- 使用Jenkins打包vue项目丢失静态资源
- 为啥淘宝网,拍拍网上的windows7激…
- android探索之UID u0_axxx的由来
- 网页制作大作业HTML+CSS制作静态网页----原神
- ORACLE AutoVue 服务器/桌面版/WebService/SDK安装
- [玩转UE4/UE5动画系统>C++篇>C++基础] 之 C++版模板中那些琐碎而又应知应会的语法知识小结(本文献给刚学完谭浩强就来啃UEC++的同学)
- shiro权限控制登陆成功页面跳转问题
- Advanced SystemCare Pro 中文绿色特别便携正式版一款易于使用的 Windows 电脑优化工具
- hibernate之HQL实体更新与删除
- 2021-06-03 一只小小白K 期许未来!
- android 装饰着模式,Android与设计模式——装饰者(Decorator)模式
- linux系统下的打印机驱动下载,方法论:Linux下如何驱动主流品牌打印机
- matlab源知识库,MATLAB產生隨機數
- Tokenview | 区块链安全