- Visible Trees HDU - 2841 容斥原理
题意:
给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树
题解:
用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到。不互质的话说明前面已经有树挡住了这棵树
i是[1,m]中的任意一个数
我们可以for循环求在区间[1,n]内有多少数与i互质
求法就是容斥原理,具体见这里:HDU - 4135 容斥原理
代码:
1 /*
2 题意:
3 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树
4
5 题解:
6 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到。不互质的话说明前面已经有树挡住了这棵树
7 */
8 #include<stdio.h>
9 #include<string.h>
10 #include<iostream>
11 #include<algorithm>
12 #include<math.h>
13 #include<queue>
14 using namespace std;
15 typedef long long ll;
16 ll v[10000],index,n;
17 void oula(ll n) //获取n的所有质因数
18 {
19 for(ll i=2; i<=sqrt(n); ++i)
20 {
21 if(n%i==0)
22 {
23 v[index++]=i;
24 n/=i;
25 while(n%i==0)
26 n/=i;
27 }
28 }
29 if(n>1)
30 v[index++]=n;
31 }
32 ll get_result(ll m)//返回1——m这个范围内与n有公因数的数的个数
33 {
34 ll que[10000],i,j,k,t=0,sum=0;
35 que[t++]=-1;
36 for(i=0; i<index; i++)
37 {
38 k=t;
39 for(j=0; j<k; j++)
40 que[t++]=que[j]*v[i]*(-1);
41 }
42 for(i=1; i<t; i++)
43 sum=sum+m/que[i];
44 return sum;
45 }
46 int main()
47 {
48 ll t;
49 scanf("%lld",&t);
50 while(t--)
51 {
52 ll n,m,ans=0;
53 scanf("%lld%lld",&n,&m);
54 ans=0;
55 for(ll i=1;i<=n;++i)
56 {
57 index=0;
58 oula(i);
59 ans+=(m-get_result(m)); //注意这里可不是这样写:ans+=get_result(m);
60 }
61 printf("%lld\n",ans);
62 }
63 return 0;
64 }
- Visible Trees HDU - 2841 容斥原理的更多相关文章
- C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥
C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...
- Visible Trees HDU - 2841
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Visible Trees HDU - 2841(容斥)
对于已经满足条件的(x1,y1),不满足条件的点就是(n*x1,n*y1),所以要求的就是满足点(x,y)的x,y互质,也就是gcd(x,y) == 1,然后就可以用之前多校的方法来做了 另f[i] ...
- hdu 2841(容斥原理+状态压缩)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- hdu 2841 Visible Trees 容斥原理
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
- HDU 2841 Visible Trees(容斥定理)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- HDU 2841 Visible Trees(数论)
标题效果:给你个m*n方格,广场格从(1,1)开始. 在树中的每个点,然后让你(0,0)点往下看,问:你能看到几棵树. 解题思路:假设你的视线被后面的树和挡住的话以后在这条线上的树你是都看不见的啊.挡 ...
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
随机推荐
- linux常用命令--转载
转载自: https://www.cnblogs.com/Qsunshine/p/10402179.html 常用指令 ls 显示文件或目录 -l列出文件详细信息l(list) -a列出当前目录下所有 ...
- Windows同一软件不同窗口如何快速切换
windows快速切换应用的快捷键是Alt + Tab 这个快捷键可以在多个应用之间快速切换,但是软件多开时,而此时我只想在同一软件内的多个窗口切换,一切换好多个窗口扑面而来,我还要去用找并用鼠标点击 ...
- 【Oracle】将数据库设为开机自启
由于某些特殊条件,需要将oracle数据库设置为开机自己,其实很简单 环境:oracle10gR2 1.修改/etc/oratab # This file is used by ORACLE util ...
- buuctf—web—Easy Calc
启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery, ("# ...
- 删除开发账号的ACCESS KEY
大家都知道,当申请一个开发账号来开发程序的时候需要一个ACCESS key,这个key我们可以通过系统管理员在OSS上注册, 也可以通过一些软件来计算,比如zapgui.EXE,但是当用软件注册完,不 ...
- SpringMVC下关于静态资源访问
SpringMVC静态资源访问 聊一聊关于静态资源的访问问题 首先,我们要对web.xml里面的DispatcherServlet进行设置 <!-- 中央调度器--> <servle ...
- Linux下利用ifconfig命令查看和操纵网络接口
为了说明这个问题,首先我们需要解释一下在Linux系统下"网络接口"的含义.通俗来讲,Linux中的所谓网络接口就是指本机的网卡,它相当于计算机的一台负责对网络进行收发数据的外设. ...
- uni-app开发经验分享二: uni-app生命周期记录
应用生命周期(仅可在App.vue中监听) 页面生命周期(在页面中添加) 当页面中需要用到下拉刷新功能时,打开pages.json,在"globalStyle"里设置"e ...
- 深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
论文标题:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文作者:Andrew ...
- NoClassDefFoundError: javax/xml/bind/DatatypeConverter错误原因以及解决办法
nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 报错内容: org.sprin ...