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