Function
Time Limit: 20000/10000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)

Problem Description
学皇最近发明了一种新的玩具––学皇筛。他对于最大公约数为 111 的数对特别着迷,想知道满足以下奇妙性质的 nnn 的因子集合。记 nnn 的一个因子为 ttt,若 ttt 与 nt\frac nttn​ 的最大公约数为 1,则称 nnn 的这个因子为“有趣的”。X 同学已经很熟练地掌握了如何求 nnn 的所有“有趣”因子的和了(记为 f(n)f(n)f(n)),但他想知道 S(n)=f(1)+f(2)+...+f(n)S(n)=f(1)+f(2)+...+f(n)S(n)=f(1)+f(2)+...+f(n) 是多少。他觉得累加所有的fff很枯燥,于是询问是否有快速的方法求 S(N)S(N)S(N)。

Input
第一行一个整数 test(1≤test≤10)test(1≤test≤10)test(1≤test≤10) 表示数据组数。

接下来 testtesttest 行,每行含一个正整数 N(1≤N≤1012)N(1≤N≤10^{12})N(1≤N≤1012)。

Output
对于每组数据,一行一个整数,表示 S(n)S(n)S(n)。由于答案可能很大,输出答案模 109+710^9+7109+7 后的值即可。

Sample Input
3
1
10
100

Sample Output
1
76
6889

思路:因为n≤1012n\le 10^{12}n≤1012,那么我们应该计算出[1,⌊n⌋][1,\lfloor\sqrt{n}\rfloor][1,⌊n​⌋]里每个数作为因子对答案的贡献。
对于任意因子i(1≤i≤⌊n⌋)i(1\le i\le \lfloor\sqrt{n}\rfloor)i(1≤i≤⌊n​⌋),假设cal(i,m)cal(i,m)cal(i,m)为iii在区间[1,m][1,m][1,m]的贡献,我们只需求出[1,m][1,m][1,m]中与iii互质的数的个数cntcntcnt以及他们的和sumsumsum,那么iii对答案的贡献即是i∗cnt+sumi*cnt+sumi∗cnt+sum。
考虑去重以及乘积范围,我们所求互质数的所在区间应为[i+1,⌊ni⌋][i+1,\lfloor\frac n i\rfloor][i+1,⌊in​⌋],及iii对答案的贡献应为cal(i,⌊ni⌋)−cal(i,i),其中i∈[1,⌊n⌋]cal(i,\lfloor\frac n i\rfloor)-cal(i,i),其中i\in[1,\lfloor\sqrt{n}\rfloor]cal(i,⌊in​⌋)−cal(i,i),其中i∈[1,⌊n​⌋]。
现在只需要求出cal(i,j)cal(i,j)cal(i,j)即可,容斥即可解决。
但是对[1,106][1,10^6][1,106]内的每个数做容斥的复杂度还是有点太高,考虑到每个数容斥所需要的因子其实大部分都是重复的,可以用类似素数筛的方法对容斥进行优化,代码如下。

#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
const int N=1000000;
typedef long long ll;
int v[N+10],cnt[N+10];
void init()
{memset(cnt,0,sizeof cnt);for(int i=2;i<=N;i++){if(v[i])continue;for(int j=i;j<=N;j+=i){v[j]=1;cnt[j]++;}}memset(v,0,sizeof v);for(int i=2;i<=N;i++){if(v[i])continue;for(int j=2*i;j<=N;j+=i){if((j/i)%i==0)v[j]=1;}}
}
ll cal(ll i,ll m,ll j)
{ll cnt = (m/i)%MOD;ll sum = (i+cnt*i%MOD)%MOD*cnt%MOD*500000004%MOD;return (cnt*j%MOD+sum)%MOD;
}
int main()
{init();int T;cin>>T;while(T--){ll n;scanf("%lld",&n);ll ans=n%MOD-1+(1+n)%MOD*(n%MOD)%MOD*500000004%MOD;ans=(ans%MOD+MOD)%MOD;for(ll i=2;i*i<=n;i++){ans+=(n/i-i)%MOD*i%MOD+(i+1+n/i)%MOD*((n/i-i)%MOD)%MOD*500000004%MOD;ans=(ans%MOD+MOD)%MOD;}for(ll i=2;i*i<=n;i++){if(v[i])continue;ll tmp = 0;for(ll j=i;j*j<=n;j+=i){tmp+=(cal(i,n/j,j)-cal(i,j,j)+MOD)%MOD;tmp%=MOD;}if(cnt[i]%2)ans-=tmp;else ans+=tmp;ans=(ans%MOD+MOD)%MOD;}printf("%lld\n",ans);}return 0;
}

HDU-6750:Function(容斥)相关推荐

  1. HDU 5514 Frogs 容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...

  2. HDU 6750 Function(莫比乌斯反演)(2020百度之星初赛1)

    Function 推式子 S(n)=∑i=1n∑d∣id[gcd(d,id)==1]=∑d=1nd∑d∣i[gcd(d,id)==1]=∑d=1nd∑i=1nd[gcd(d,i)==1]=∑d=1nd ...

  3. HDU 6143 Killer Names(排列+容斥,dp)

    Killer Names HDU 6143 (容斥+排列组合,dp+整数快速幂) 2017ACM暑期多校联合训练 - Team 8 1011 Killer Names 题目链接 Time Limit: ...

  4. Visible Trees HDU - 2841(容斥)

    Visible Trees HDU - 2841 题意: 大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 题解: 容斥做法参考 这个题和AcWin ...

  5. 容斥 - HDU 4135 Co-prime

    Co-prime Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...

  6. hdu 5514 容斥

    hdu 5514 题意:有n个青蛙编号1~n,m块石头编号0~m-1,石头围成一圈,每只青蛙会从第ii块跳到第(i + ai) mod m(i \ + \ a_i) \ mod \ m块,青蛙会跳无数 ...

  7. hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)

    题目链接:hdu 5468 Puzzled Elena 解题思路 预处理出每个数的因子(注意只需要质因子幂数最大为1的数,例如6=21∗316=2^1 * 3^1)然后用一个数组维护,fac[i]表示 ...

  8. hdu 1796 How many integers can you find 容斥定理

    一开始看 这里 这个文章博主写得很好. 当举容斥定理的所谓 奇数为负 偶数为正的时候. 我直接就认为是 a*b 了.实际上是lcm(a,b). 由于博文中的因子都是互素的(素数之间).所以lcm(a, ...

  9. HDU 6052 To my boyfriend(容斥+单调栈)

    题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...

最新文章

  1. 国内拉取google Kubernetes镜像
  2. Mac-使用技巧之快速新建txt文本
  3. IE11下载文件时出现文件名乱码
  4. c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
  5. mysql大数据优化要注意的细节
  6. sip消息概念(一)
  7. 小白学数据分析-----聚类分析理论之TwoSteps理论篇+实践篇
  8. Linux忘记 root密码的解决办法
  9. mysql ocp 题库部分解析
  10. 【TSP问题】基于狼群算法求解旅行商问题含Matlab源码
  11. ThingJS学习总结
  12. springboot整合fluent-mybatis,报错“...is not a @FluentMybatis Entity or it‘s Mapper not defined as bean.”
  13. 一个能够快速下载Git.exe历史版本的方法
  14. 714. 买卖股票的最佳时机含手续费(CPP)
  15. arcsde mysql_ArcSDE空间数据库安装配置问题
  16. 机器学习入门的书单(数据挖…
  17. 手机长曝光是什么意思_手机摄影丨手把手教你如何实现手机长曝光
  18. win7 计算机管理的命令,win7 cmd命令大全_windows7的cmd命令有哪些
  19. Magento2开发人员认证考试
  20. 青蛙设计首席创意执行官:一切都是为了创新

热门文章

  1. 三菱 fx2n 通信 linux 代码,三菱FX2N PLC串行通讯指令(FNC 80 RS)
  2. requireJS教程(一)
  3. 【JavaScript】DOM节点-创建、插入、删除、替换、克隆节点
  4. AOSP ~ 默认属性值
  5. js排列组合算法解决方案
  6. 前端面试题——Vue 高频
  7. oracle rowcount(),oracle 之 sql%rowcount 查看受影响的记录行数
  8. 读:沧月《似是故人来》
  9. 什么是O2O模式 O2O模式为何这么火?
  10. 运动会加油稿计算机学院,学院运动会加油稿