Visible Trees(hdu2841)
Visible Trees
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2462 Accepted Submission(s): 1032
are many trees forming a m * n grid, the grid starts from (1,1). Farmer
Sherlock is standing at (0,0) point. He wonders how many trees he can
see.
If two trees and Sherlock are in one line, Farmer Sherlock can only see the tree nearest to him.
first line contains one integer t, represents the number of test cases.
Then there are multiple test cases. For each test case there is one
line containing two integers m and n(1 ≤ m, n ≤ 100000)
1 1
2 3
5
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<queue>
7 int oula[100005];
8 bool prime[100005];
9 int ans[100005];
10 long long bns[100005];
11 int id[100005];
12 using namespace std;
13 typedef long long LL;
14 queue<int>que;
15 int main(void)
16 {
17 int i,j,k;
18 for(i=0; i<100005; i++)
19 oula[i]=i;
20 oula[1]=0;
21 memset(prime,0,sizeof(prime));
22 for(i=2; i<1000; i++)
23 {
24 if(!prime[i])
25 {
26 for(j=i; i*j<=100000; j++)
27 {
28 prime[i*j]=true;
29 }
30 }
31 }
32 int cnt=0;
33 for(i=2; i<=100000; i++)
34 if(!prime[i])
35 ans[cnt++]=i;
36 for(i=0; i<cnt; i++)
37 {
38 for(j=1; j*ans[i]<=100000; j++)
39 {
40 oula[j*ans[i]]/=ans[i];
41 oula[j*ans[i]]*=(ans[i]-1);
42 }
43 }
44 scanf("%d",&k);
45 int n,m;
46 while(k--)
47 {
48 scanf("%d %d",&n,&m);
49 memset(id,0,sizeof(id));
50 int xx=max(n,m);
51 int cc=min(n,m);
52 if(cc==1)
53 printf("%d\n",xx);
54 else
55 {
56 long long sum=0;
57 for(i=2; i<=cc; i++)
58 {
59 sum+=oula[i];
60 }
61 sum*=2;
62 for(i=cc+1; i<=xx; i++)
63 {
64 int vv=i;
65 int t=0;
66 int flag=0;
67 while(vv>1)
68 {
69 if(vv%ans[t])
70 {
71 t++;
72 flag=0;
73 }
74 else if(vv%ans[t]==0&&flag==0)
75 {
76 que.push(ans[t]);
77 flag=1;
78 vv/=ans[t];
79 }
80 else if(vv%ans[t]==0&&flag)
81 {
82 vv/=ans[t];
83 }
84 if(vv==1)
85 break;
86 }
87 int ak=0;
88 while(!que.empty())
89 {
90 id[ak++]=que.front();
91 que.pop();
92 }
93 LL ff=0;
94 int ii;
95 for(ii=1; ii<=(1<<ak)-1; ii++)
96 {
97 int tt=0;
98 LL pp=1;
99 for(j=0; j<ak; j++)
100 {
101 if(ii&(1<<j))
102 {
103 tt++;
104 pp*=id[j];
105 }
106 }
107 if(tt%2==0)
108 {
109 ff-=cc/pp;
110 }
111 else ff+=cc/pp;
112 }
113 sum+=cc-ff;
114
115 }
116 sum+=1;
117 printf("%lld\n",sum);
118 }
119 }
120 return 0;
121 }
Visible Trees(hdu2841)的更多相关文章
- 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 ...
- HDU-2841 Visible Trees(莫比乌斯反演)
Visible Trees 传送门 解题思路: 实际上的答案就是1~n与1~m之间互质的数的对数,写出式子就是 \(ans=\sum^{n}_{i=1}\sum^{m}_{j=1}[gcd(i,j)= ...
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
- HDU 2841 Visible Trees 数论+容斥原理
H - Visible Trees Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 2841 Visible Trees(数论)
标题效果:给你个m*n方格,广场格从(1,1)开始. 在树中的每个点,然后让你(0,0)点往下看,问:你能看到几棵树. 解题思路:假设你的视线被后面的树和挡住的话以后在这条线上的树你是都看不见的啊.挡 ...
- Visible Trees HDU - 2841
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥
C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...
- hdu 2841 Visible Trees 容斥原理
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
- Visible Trees
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
随机推荐
- mysql 分组统计、排序、取前N条记录解决方案
需要在mysql中解决记录的分组统计.排序,并抽取前10条记录的功能.现已解决,解决方案如下: 1)表结构 CREATE TABLE `policy_keywords_rel` ( `id` int( ...
- JavaSE中级篇1 — 核心思想:面向对象 — 更新完毕
1.面向对象编程思想(重点中的重点) 题外话: 其他都还可以是技术,但这里是走自己的路--面向对象编程,即:OOP,养成的思想就是:万物皆对象,懂得把东西抽离出来 这一部分记的理论知识很多,而且需要自 ...
- 商业爬虫学习笔记day2
1. get传参 (1)url中包含中文报错解决方法 urllib.request.quote("包含中文的url", safe = "string.printtable ...
- Oracle——概要文件profile
profile文件详解 一.目的 Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对 ...
- linux允许直接以root身份ssh登录
1. sudo su - 2. vim /etc/ssh/sshd_config 3. let "PermitRootLogin" equal yes 4. :wq 5. serv ...
- tomcat启动和停止脚本
#!/bin/bash JDK_HOME=/apps/jdk1.7.0_79 CATALINA_HOME=/apps/tomcat export JDK_HOME CATALINA_HOME sour ...
- 4.1 python中调用rust程序
概述 使用rust-cpython将rust程序做为python模块调用: 通常为了提高python的性能: 参考 https://github.com/dgrunwald/rust-cpython ...
- jenkins之代码回滚
#:通过传参数方式 #:保存后就会看到这样 #;:我们在jenkins服务器写一个脚本 root@ubuntu:~# mkdir /root/script/web1 -pv mkdir: create ...
- Linux 双网卡绑定及Bridge
Linux 双网卡绑定及Bridge 阅读(5,202) 一:linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多. ...
- 收集linux网络配置信息的shell脚本
此脚本已在CentOS/ RHEL和Fedora Linux操作系统下进行测试过.可用于当前网络配置信息. 代码: #!/bin/bash # HWINF=/usr/sbin/hwinfo IFCFG ...