题面戳我(题面很鬼畜建议阅读一下)

题意:给出n,m,求

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\mbox{不是完全平方数}]
\]

多组数据,\(n,m\le10^7\)

sol

SBT

演成这个样子:

\[\sum_{T=1}^{n}\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor\sum_{d|T}\mu(\frac Td)[d\mbox{不是完全平方数}]
\]

对于那个\([d\mbox{不是完全平方数}]\),我们先假设这个表达式恒为真,那么后面那一坨就是$$\sum_{d|T}\mu(\frac Td)=\sum_{d|T}\mu(d)=[T==1]$$

然后再把不合法的(完全平方数)在里面减掉。

因为完全平方数只有\(\sqrt{n}\)个所以复杂度完全可以承受

code

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. #define ll long long
  5. const int N = 10000000;
  6. int gi()
  7. {
  8. int x=0,w=1;char ch=getchar();
  9. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  10. if (ch=='-') w=0,ch=getchar();
  11. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  12. return w?x:-x;
  13. }
  14. int pri[N+5],tot,zhi[N+5],mu[N+5],h[N+5];
  15. void Mobius()
  16. {
  17. zhi[1]=mu[1]=h[1]=1;
  18. for (int i=2;i<=N;i++)
  19. {
  20. if (!zhi[i]) pri[++tot]=i,mu[i]=-1;
  21. for (int j=1;j<=tot&&i*pri[j]<=N;j++)
  22. {
  23. zhi[i*pri[j]]=1;
  24. if (i%pri[j]) mu[i*pri[j]]=-mu[i];
  25. else break;
  26. }
  27. }
  28. for (int i=1;i*i<=N;i++)
  29. for (int j=i*i;j<=N;j+=i*i)
  30. h[j]-=mu[j/(i*i)];
  31. for (int i=1;i<=N;i++) h[i]+=h[i-1];
  32. }
  33. int main()
  34. {
  35. Mobius();
  36. int T=gi();
  37. while (T--)
  38. {
  39. int n=gi(),m=gi(),i=1;ll ans=0;
  40. if (n>m) swap(n,m);
  41. while (i<=n)
  42. {
  43. int j=min(n/(n/i),m/(m/i));
  44. ans+=1ll*(n/i)*(m/i)*(h[j]-h[i-1]);
  45. i=j+1;
  46. }
  47. printf("%lld\n",ans);
  48. }
  49. return 0;
  50. }

[HDU5663]Hillan and the girl的更多相关文章

  1. hdu 5663 Hillan and the girl 莫比乌斯反演

    Hillan and the girl Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/O ...

  2. HDU 5663 Hillan and the girl (莫比乌斯反演 + 分块)

    题意:给定n,m,求,其中F(x)=0,,如果x是完全平方数,否则是1. 析: 由于按照题意的F,不好筛选,所以我们反过来,F(x),x是平方数,就是1,否则是0. 这个是可以预处理出来的,可以用筛选 ...

  3. 莫比乌斯反演进阶-洛谷P2257/HDU5663

    学了莫比乌斯反演之后对初阶问题没有任何问题了,除法分块也码到飞起,但是稍微变形我就跪了.用瞪眼观察法观察别人题解观察到主要内容除了柿子变形之外,主要就是对于miu函数的操作求前缀和.进而了解miu函数 ...

  4. 一场BC的台前幕后

    #define BC BestCoder 一场BC的台前幕后 起源大概是这种:一个月前的BC#75结束后,AK的人非常多,于是CodeVS群里非常多人吐槽BC#75的质量,这时YJQ对KPM说:&qu ...

随机推荐

  1. 页面刷新方式实时检测cookie是否失效

    在浏览器端每隔10秒钟刷新一次页面,可用于检查cookie值是否失效. 在study.php文件中存在这样一条语句: <meta http-equiv="refresh" c ...

  2. springboot入门_helloworld

    开始学习springboot,在此做记录,有不正确之处,还望读者指正. springboot框架的设计目的是用来简化新Spring应用的初始环境搭建以及开发过程.主要体现有:1 xml配置文件,使用s ...

  3. mongodb的TTL索引介绍(超时索引)

    TTL索引是mongodb新支持的用于延时自动删除记录的一种索引.它仅包含一个字段,该字段值需要是Date()类型,并且不支持复合索引.可以指定某条记录在延时固定时间后自动删除.数据自动超时删除主要用 ...

  4. js使用defineProperty的一些坑

    var p2={ }; Object.defineProperty(p2,"gs",{ get:function () { return this.gs; }, set:funct ...

  5. Python——Web.py詳解

    ubuntu安裝Web.py sudo pip install web.py 測試代碼: import web urls = ( '/(.*)','hello' ) app = web.applica ...

  6. Android 如何进行页面传递对象

    当我们从一个页面调到另一个页面的时候,需要把该页面的一些设定值也传递给下一个页面.当要传递的值很多时,我们可以传递一个对象. 页面1: Intent intent = new Intent(PageO ...

  7. HDU - 2154 线性dp

    思路:0表示A,1表示B,2表示C,d(i, j)表示在第j次时正好到达i. AC代码 #include <cstdio> #include <cmath> #include ...

  8. linux查看端口被占用等常用命令

    一   根据端口号 查找对应的服务 比如我们查查找端口号8189对应的服务是哪个 1  先根据端口号查找对应对的pid(进程id)为23367 netstat -anp  | grep 8189    ...

  9. NewLife.XCode 上手指南2018版(二)增

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  10. 数据排序--vue

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...