n<=2e6的数组,m<=2e6个询问,对1<=i<=m的每个i问:只用<=i的数字填进数组,有多少种方案使数组的总gcd=1.强制把每个询问的答案求出来。

比如说现在有个确定的i=t,然后看看答案怎么算先。先把所有情况加起来,然后除去gcd=2,3,4,5,……的,那直接统计有多少gcd=2,3,4,5的不方便,总可以统计有多少gcd是2的倍数的,3的倍数的,……,吧!这样的话丢掉了gcd为2的倍数,3的倍数的,等等6的倍数丢多了一次因为在2和3都算了,要减掉……就一个容斥,对应了各自的莫比乌斯函数。于是可以愉快的写出t的答案$f(t)=\sum_{i=1}^{t} \mu(i) (\frac{t}{i})^n$。

然后就看看t变成t+1时答案怎么变化,对一个k,他的$(\frac{t}{k})$只有在t是k的倍数时才会变化!而这个“变化”的总数,就是1-m中所有1-m的倍数的数量的总数,就是m+m/2+m/3+……,就是mlnm个“变化”,就可以做!

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
//#include<bitset>
using namespace std; int n,m;
#define maxn 2000011
const int mod=1e9+;
int miu[maxn],prime[maxn],lp=,mi[maxn],small[maxn]; bool notprime[maxn]; int powmod(int a,int b)
{
int ans=;
while (b)
{
if (b&) ans=1ll*ans*a%mod;
a=1ll*a*a%mod;
b>>=;
}
return ans;
} void pre(int n)
{
miu[]=;
for (int i=;i<=n;i++)
{
if (!notprime[i]) {prime[++lp]=i; miu[i]=-; small[i]=i;}
for (int j=;j<=lp && 1ll*prime[j]*i<=n;j++)
{
notprime[i*prime[j]]=;
small[i*prime[j]]=prime[j];
if (i%prime[j]) miu[i*prime[j]]=-miu[i];
else {miu[i*prime[j]]=; break;}
}
}
} int ans,fix,num[maxn];
int list[maxn],ci[maxn],ll;
void play(int x)
{
fix+=miu[x]*(mi[num[x]+]-mi[num[x]]);
fix+=fix<?mod:,fix-=fix>=mod?mod:;
num[x]++;
}
void dfs(int now,int cur)
{
if (cur>ll) {play(now); return;}
for (int i=,tmp=;i<=ci[cur];i++,tmp*=list[cur]) dfs(now*tmp,cur+);
} void solve(int x)
{
ll=;
for (int i=x;i>;i/=small[i])
{
if (list[ll]!=small[i]) list[++ll]=small[i],ci[ll]=;
else ci[ll]++;
}
dfs(,);
} int main()
{
scanf("%d%d",&n,&m); pre(m);
for (int i=;i<=m;i++) mi[i]=powmod(i,n); ans=; fix=;
for (int i=;i<=m;i++) solve(i),ans+=i^fix,ans-=ans>=mod?mod:;
printf("%d\n",ans);
return ;
}

最新文章

  1. 爱上MVC~ajax调用分部视图session超时页面跳转问题
  2. ELK_elk+redis 搭建日志分析平台
  3. Unix/Linux 命令技巧
  4. 静态库 &amp;&amp; 动态库
  5. Oracle Study Note : Tablespace and Data Files
  6. VR开发中性能问题—OculusWaitForGPU
  7. [C#]Thread Safe Dictionary in .NET 2.0
  8. Ubunu下安装Docker
  9. Java笔记:与系统交互、系统相关的类,Object类
  10. css2.1实现圆角边框
  11. xmanager 打开centos7图形化窗口
  12. P4554 小明的游戏
  13. Python学习笔记,day1
  14. Django项目解决跨域问题
  15. eslint相关工具
  16. [qemu][kvm] 在kvm嵌套kvm的虚拟机里启动kvm加速
  17. C# Activator和new的区别
  18. jdk源码-&gt;并发-&gt;Unsafe&amp;Atomic
  19. c++时间计算模块
  20. hdu 4442 37届金华赛区 A题

热门文章

  1. Selenium2工作原理
  2. Java socket1
  3. 【LeetCode】树的遍历
  4. hdu 1695 GCD 欧拉函数 + 容斥
  5. poj1715Hexadecimal Numbers(数位dp)
  6. js实现元素水平垂直居中
  7. 微信小程序button授权页面,用户拒绝后仍可再次授权
  8. 升级 Cocoapods 到1.2.0指定版本,降低版本及卸载
  9. 冒泡排序算法和简单选择排序算法的js实现
  10. Java Hello World 错误 找不到或无法加载主类