题意:

给你一个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 }

最新文章

  1. python实现的视频下载工具you-get,支持多个国内外主流视频平台
  2. 孙鑫MFC学习笔记1.Windows应用程序运行机理
  3. iOS图片加载新框架 - FlyImage
  4. Android代码优化——使用Android lint工具
  5. Linux系统默认服务建议开启关闭说明列表
  6. 轻松学习Linux之自动执行任务
  7. opencv win7 配置
  8. iOS开发笔记系列-基础2(类)
  9. MySQL B+树索引和哈希索引的区别
  10. Qt QToolTip 控件背景的 QSS 设置方法(摘抄)
  11. Observer设计模式【利用商品概念解释】
  12. Coreseek/sphinx全文检索的了解
  13. CentOS 6.5搭建Samba服务器
  14. Win10 之最新最简单有效安装配置adb
  15. Linux常用命令之文件处理命令
  16. ZOJ 2480 - Simplest Task in Windows
  17. 通配符的匹配很全面, 但无法找到元素 &#39;context:property-placeholder&#39; 的声明。
  18. 2017-2018-2 20155228 《网络对抗技术》 实验三:MAL_免杀原理与实践
  19. 原子类型的使用&amp;Unsafe&amp;CAS
  20. gitlab访问用户安装的postgresql数据库

热门文章

  1. Lniux 入门:03 用户及文件权限管理
  2. 【Linux】find删除365天以前的文件详细解析
  3. 【Oracle】静默安装oracle 11.2.0.4 超详细
  4. 什么是开发中经常说的&#39;POCO&#39;
  5. ctfhub技能树—文件上传—前端验证
  6. 查询数据库v$session时报部分多维元组字元
  7. oracle视图添加hint
  8. 关于SQL Server 镜像数据库快照的创建及使用
  9. TekRADIUS5.5安装教程
  10. VMware中安装Ubuntu后,安装VMwareTools提示“Not enough free space to extract VMwareTools-10.3.10-13959562.tar.gz”的解决办法