题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2841

题目大意:

N*M的格点上有树,从0,0点可以看到多少棵树。

解题思路:

发现如果A1/B1=A2/B2那么就有一棵树看不到,所以就是找出Ai/Bi有多少种。

如果A,B有大于1的公约数,则A=A'*D B=B'*D,那么A/B=A'/B',也就是存在另外一组数和这种相等,则问题转换成有多少对互质的数。

求1-m中有多少个与1-n中互质的数目,

可以枚举m,每次求1-n中与m互质的数目。(HDU-4135简单版

初始化:m = 1的时候,答案就是n

 #include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + ;
ll a[], tot;
ll gcd(ll a, ll b)
{
return b == ? a : gcd(b, a % b);
}
void init(ll n)//求出n的素因子
{
tot = ;
for(ll i = ; i * i <= n; i++)
{
if(n % i == )
{
a[tot++] = i;
while(n % i == )n /= i;
}
}
if(n != )a[tot++] = n;
}
ll sum(ll m)//求[1, m]中与n互质的个数
{
ll ans = ;
for(int i = ; i < ( << tot); i++)//a数组的子集
{
ll num = ;
for(int j = i; j; j >>= )if(j & )num++;//统计i的二进制中1的个数
ll lcm = ;
for(int j = ; j < tot; j++)
if(( << j) & i)
{
lcm = lcm / gcd(lcm, a[j]) * a[j];
if(lcm > m)break;
}
if(num & )ans += m / lcm;//奇数加上
else ans -= m / lcm;//偶数减去
}
return m - ans;
}
ll n, m;
int main()
{
int T, cases = ;
cin >> T;
while(T--)
{
cin >> n >> m;
//if(n < m)swap(n, m);
ll ans = n;
for(int i = ; i <= m; i++)
{
init(i);
ans += sum(n);
}
cout<<ans<<endl;
}
return ;
}

hdu-2841 Visible Trees---容斥定理的更多相关文章

  1. HDU 2841 Visible Trees(容斥定理)

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

  2. HDU 1695 GCD(容斥定理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. 题解报告:hdu 4135 Co-prime(容斥定理入门)

    Problem Description Given a number N, you are asked to count the number of integers between A and B ...

  4. C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥

    C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...

  5. HDU 2841 Visible Trees(容斥)题解

    题意:有一块(1,1)到(m,n)的地,从(0,0)看能看到几块(如果两块地到看的地方三点一线,后面的地都看不到). 思路:一开始是想不到容斥...后来发现被遮住的地都有一个特点,若(a,b)有gcd ...

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

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

  7. HDU 2841 Visible Trees(数论)

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

  8. hdu 2841 Visible Trees 容斥原理

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

  9. hdu 2841 Visible Trees(容斥)

    原文链接 There are many trees forming a m * n grid, the grid starts from (1,1). Farmer Sherlock is stand ...

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

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2841 题意:给n*m的矩阵(从(1,1)开始编号)格子,每个格子有一棵树,人站在(0,0)的位置,求可 ...

随机推荐

  1. Python基础(1) - 初识Python

    Python 特点: 1)面向对象 2)解释执行 3)跨平台.可移植 4)垃圾回收机制 5)动态数据类型.强类型 6)可扩展.可嵌入 Python可以方便调用C/C++等语言,同时也可以方便的被C/C ...

  2. CentOS下输入输出重定向

    nux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linux默认输入 ...

  3. openlayers 4快速渲染管网模型数据

    1.背景 项目需要将管网模型运行的结果数据在矢量地图上以不同颜色加以区分.结果数据中和图层数据中唯一能对应的只有一个标识. 2.实现思路 利用定时器+图层统一渲染.在style上找到突破口,而不是用常 ...

  4. 记录一次Spring Data Solr相关的错误解决

    记录一次Spring Data Solr相关的错误解决 生活本不易,流人遂自安 相信大家也使用过SpringDataSolr,但是在最新版的SpringDataSolr 4.0.5 RELEASE中有 ...

  5. spring_boot 配置

    配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  6. JS之捕获冒泡和事件委托

    一.事件流(捕获,冒泡)   事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...

  7. 子div设置float后会导致父div无法自动撑开

    本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 注: 文章部分转载 彩泉 - 博客园 原因:内部的DIV因为float:l ...

  8. 解决方案看起来是受源代码管理,但无法找到它的绑定信息。保存解决方案的源代码管理设置的MSSCCPRJ.SCC文件或其他项可能己被删除。

    Visual Studio 2015 + SVN 开发环境,今天打开项目,就报了下面这个错误,先前是好好的! 解决方案看起来是受源代码管理,但无法找到它的绑定信息.保存解决方案的源代码管理设置的MSS ...

  9. Codeforces Round #413 B. T-shirt buying

    B. T-shirt buying time limit per test   3 seconds memory limit per test   256 megabytes   A new pack ...

  10. 动态注册broadcast的安全考虑

    一.android service通知activity更新方式有1. service 通过广播的形式发送broadcast,向这个activity的内部类发广播的消息来更新界面2. service直接 ...