主题链接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]里的数都素因子分解了,然后容斥一下就搞定了。

代码例如以下

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std; const int maxn = 100010;
typedef long long LL; int Prim[maxn],num[maxn][20];
void init()
{
int i,j;
memset(Prim,0,sizeof(Prim));
for(i=1; i<=100000; i++) num[i][0]=0;
for(i=2; i<=100000; i++)
if(Prim[i]==0)
{
num[i][1]=i;
num[i][0]++;
for(j=i*2; j<=100000; j+=i)
{
num[j][++num[j][0]]=i;
Prim[j]=1;
}
}
} LL dfs(int id,int b,int now)//求不大于b的数中,与now不互质的数的个数;
{
LL ans=0;
for(int i=id;i<=num[now][0];i++)
ans+=b/num[now][i]-dfs(i+1,b/num[now][i],now);
return ans;
} int main()
{
int m,n,t;
cin>>t;
while(t--){
cin>>m>>n;
init();
long long sum=0;
for(int i=2;i<=m;i++)
sum+=n-dfs(1,n,i);
printf("%I64d\n",sum+n);
}
return 0;
}

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

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. Eclipse利用代理快速安装插件

    在eclipse启动时增加以下参数: eclipse.exe -vmargs -DproxySet=true -DproxyHost=aProxyAddress -DproxyPort=aProxyP ...

  2. activiti_SpringEnvironment

    package main; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; i ...

  3. DIV布局之道一:DIV块的水平并排、垂直并排

    DIV布局网页元素的方式主要有三种:平铺(并排).嵌套.覆盖(遮挡).本文先讲解平铺(并排)方式. 1.垂直平铺(垂直排列) 请看如下代码 CSS部分: CSS Code复制内容到剪贴板 .lay1{ ...

  4. Android开发手记(11) 滑动条SeekBar

    安卓滑动条的操作特别简单,通过getProgress()可以获得SeekBar的位置,通过setProgress(int progress)可以设置SeekBar的位置.要想动态获取用户对SeekBa ...

  5. Windows计划任务 未能启动

    近期在windows server 2003上运行的备份脚本,在7月23日之后,没再运行,在计划任务里看到的状态是:未能启动.结果手动运行了一下备份脚本,没有问题,可以正常运行,但是在计划任务里为什么 ...

  6. php empty和isset的区别

    通过一个例子来解释一下, $id = 0  empty($id) 的值是true isset($id) 也是true. empty 和isset 处理对象无外乎 未定义常量 .0 .空字符串 如果变量 ...

  7. JS滚动条下拉事件

    <script type="text/javascript"> window.onscroll = function(){ var t = document.docum ...

  8. php 被抛弃使用的函数

    call_user_method()(使用 call_user_func() 替代)     call_user_method_array() (使用 call_user_func_array() 替 ...

  9. 网址测速JS

    /*.route_nav li a:hover{background: #3c7f84 url(title.png) no-repeat;border-color:#84a3a5;}*/ .route ...

  10. NET Core & VS Code 之路(2) Web API

    NET Core & VS Code 之路(2) Web API 开发Core项目的条件 Visual Studio 2015 Update 3 .NET Core 1.0.0 - VS 20 ...