主题链接http://acm.hdu.edu.cn/showproblem.php?pid=2841

题意

一个人在(0,0)点,然后前面有一个m*n的格子 ,每一个格子的节点上有一棵树。问这个人站在原地能看到多少棵树

假设两棵树在一条直线上那么仅仅能看到最前面的一棵树。

分析

假设一个数的坐标为(a,b)。那么坐标为(a*k,b*k)的都不能看见。假设a,b有公因子c那么我们肯定仅仅能看到(a/c,b/c)。

因此我们得出结论,能看到的树的横纵坐标一定互质。

那么我们就能够把问题转化为,从[1,n]有多少个数与m里的数互质。

那么仅仅用把[1,n]里的数都素因子分解了,然后容斥一下就搞定了。

代码例如以下

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. const int maxn = 100010;
  8. typedef long long LL;
  9.  
  10. int Prim[maxn],num[maxn][20];
  11. void init()
  12. {
  13. int i,j;
  14. memset(Prim,0,sizeof(Prim));
  15. for(i=1; i<=100000; i++) num[i][0]=0;
  16. for(i=2; i<=100000; i++)
  17. if(Prim[i]==0)
  18. {
  19. num[i][1]=i;
  20. num[i][0]++;
  21. for(j=i*2; j<=100000; j+=i)
  22. {
  23. num[j][++num[j][0]]=i;
  24. Prim[j]=1;
  25. }
  26. }
  27. }
  28.  
  29. LL dfs(int id,int b,int now)//求不大于b的数中,与now不互质的数的个数;
  30. {
  31. LL ans=0;
  32. for(int i=id;i<=num[now][0];i++)
  33. ans+=b/num[now][i]-dfs(i+1,b/num[now][i],now);
  34. return ans;
  35. }
  36.  
  37. int main()
  38. {
  39. int m,n,t;
  40. cin>>t;
  41. while(t--){
  42. cin>>m>>n;
  43. init();
  44. long long sum=0;
  45. for(int i=2;i<=m;i++)
  46. sum+=n-dfs(1,n,i);
  47. printf("%I64d\n",sum+n);
  48. }
  49. return 0;
  50. }

版权声明:本文博主原创文章,博客,未经同意不得转载。

HDU2841 Visible Trees (容斥原理)的更多相关文章

  1. hdu2848 Visible Trees (容斥原理)

    题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...

  2. Hdu2841 Visible Trees 2017-06-27 22:13 24人阅读 评论(0) 收藏

    Visible Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  3. hdu 2841 Visible Trees 容斥原理

    Visible Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pr ...

  4. HDU-2841 Visible Trees(莫比乌斯反演)

    Visible Trees 传送门 解题思路: 实际上的答案就是1~n与1~m之间互质的数的对数,写出式子就是 \(ans=\sum^{n}_{i=1}\sum^{m}_{j=1}[gcd(i,j)= ...

  5. HDU2841 Visible Trees(容斥原理)

    题目..大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 如果(0,0)->(x,y)和(0,0)->(x',y')两个向量平行,那后面 ...

  6. HDU 2841 Visible Trees 数论+容斥原理

    H - Visible Trees Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  7. Visible Trees(hdu2841)

    Visible Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. HDU 2841 Visible Trees(数论)

    标题效果:给你个m*n方格,广场格从(1,1)开始. 在树中的每个点,然后让你(0,0)点往下看,问:你能看到几棵树. 解题思路:假设你的视线被后面的树和挡住的话以后在这条线上的树你是都看不见的啊.挡 ...

  9. Visible Trees HDU - 2841

    Visible Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

随机推荐

  1. (@DBRef)spring-data-mongodb

    @DBRef用在哪些地方 已知的有 @DBRefprivate Shop product; @DBRefprivate List<Account> accounts;    如果不加@DB ...

  2. Asp服务器控件(HyperLink、Button) 绑定后台参数 DataBinder.Eval

    HyperLink动态绑定参数 <asp:HyperLink id="MbCenterHLnk" runat="server" Text='会员中心' T ...

  3. 【译】addEventListener 第二个参数

    这是原文链接:Our Backwards DOM Event Libraries 浏览器APIs 先简单回顾一下各个浏览器提供了哪些绑定事件的接口. IE浏览器提供了element.attachEve ...

  4. Xcode7.0设置网络白名单

  5. 使用WebFrom来模拟一些MVC的MODEL与View的数据交互功能

    MVC中有一点非常闪瞎人眼的功能就是,可以根据Model与View视图来直接将页面也数据模型进行绑定,那么我们在想客户端发送页面时不需要进行各种控件赋值,不需要操心怎么渲染,当客户提交表单给服务器时也 ...

  6. nat123 与微信公众号开发者测试账号配合调试

    由于公司本身是做互联网 电商行业的,微信也是一个大块,近期开始花费时间在整合,总结自己的经验,看看之前的实现是否有明显的问题. 花了点钱(8块钱)充值了nat123,进行了内网穿透.之前也有使用花生壳 ...

  7. react-native迁移版本遇到的问题

    问题: 1.  failed to find Build Tools revision 23.0.1 两个版本号需要对应

  8. JQuery 解析xml

    JQuery 可以通过 $.get() 或 $.post() 方法来加载 xml.     JQuery 解析 XML 与解析 DOM 一样, 可以使用 find(), children() 等函数来 ...

  9. python反射机制

    http://blog.163.com/yang_jianli/blog/static/161990006201382241223156/ http://www.jb51.net/article/54 ...

  10. eclipse在当前项目里面批量替换所有单词

    ctrl+f里面只能单个文件用,要整个项目批量替换. 1. 先选中你要替换字符串, 2. 再菜单栏中找到Search→Text→Project,这样就会在整个项目中查找单词. 3. 然后在Search ...