UVa 10214 - Trees in a Wood.(欧拉函数)
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1155
题意:
在满足|x|≤a,|y|≤b(a≤2000,b≤2000000)的网格中,除了原点之外的整点(即x,y坐标均为整数的点)各种着一棵树。
树的半径可以忽略不计,但是可以相互遮挡。求从原点能看到多少棵树。
设这个值为K,要求输出K/N,其中N为网格中树的总数。
分析:
显然4个坐标轴上各只能看见一棵树,所以可以只数第一象限(即x>0,y>0),答案乘以4后加4。
第一象限的所有x, y都是正整数,能看到(x,y),当且仅当gcd(x,y)=1。
由于a范围比较小,b范围比较大,一列一列统计比较快。
第x列能看到的树的个数等于0<y≤b的数中满足gcd(x,y)=1的y的个数。可以分区间计算。
1≤y≤x:有phi(x)个,这是欧拉函数的定义。
x+1≤y≤2x:也有phi(x)个,因为gcd(x+i,x)=gcd(x,i)。
2x+1≤y≤3x:也有phi(x)个,因为gcd(2x+i,x)=gcd(x,i)。
……
kx+1≤y≤b:直接统计,需要O(x)时间。
代码:
import java.io.*;
import java.util.*; public class Main {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
final int UP = 2000 + 5;
int a, b, phi[] = new int[UP]; void constant() {
phi[1] = 1;
for(int i = 2; i < UP; i++) phi[i] = 0;
for(int i = 2; i < UP; i++) if(phi[i] == 0) {
for(int t = i; t < UP; t += i) {
if(phi[t] == 0) phi[t] = t;
phi[t] = phi[t] / i * (i-1);
}
}
} int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
} long black() {
long res = 0;
for(int i = 1; i <= a; i++) {
int k = b / i;
res += k * phi[i];
for(int t = k*i+1; t <= b; t++) {
if(gcd(i,t) == 1) res++;
}
}
return res * 4 + 4;
} void MAIN() {
constant(); // 预处理欧拉函数值
while(true) {
a = cin.nextInt();
b = cin.nextInt();
if(a + b == 0) break;
long all = (2*a+1L) * (2*b+1L) - 1;
System.out.printf("%.7f\n", (double)black() / all);
}
} public static void main(String args[]) { new Main().MAIN(); }
}
UVa 10214 - Trees in a Wood.(欧拉函数)的更多相关文章
- UVA 10214 Trees in a Wood(欧拉函数)
题意:给你a.b(a<=2000,b<=2000000),问你从原点可以看到范围在(-a<=x<=a,-b<=y<=b)内整数点的个数 题解:首先只需要计算第一象限 ...
- UVA 10214 Trees in a Wood
https://vjudge.net/problem/UVA-10214 题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树 ans=Σ gcd(x,y)=1 欧拉函数搞搞 #incl ...
- UVa 10820 - Send a Table(欧拉函数)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 11426 GCD - Extreme (II) (欧拉函数)题解
思路: 虽然看到题目就想到了用欧拉函数做,但就是不知道怎么做... 当a b互质时GCD(a,b)= 1,由此我们可以推出GCD(k*a,k*b)= k.设ans[i]是1~i-1与i的GCD之和,所 ...
- UVa 10214 Trees in a Wood. (数论-欧拉函数)
题意:给定一个abs(x) <= a, abs(y) <= b,除了原点之外的整点各有一棵树,可以相互阻挡,求从原点可以看到多少棵树. 析:由于a < b,所以我们可以一列一列的统计 ...
- UVA 11426 GCD - Extreme (II) (欧拉函数)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Problem JGCD Extreme (II)Input: Standard ...
- UVA 11426 GCD - Extreme (II) (数论|欧拉函数)
题意:求sum(gcd(i,j),1<=i<j<=n). 思路:首先能够看出能够递推求出ans[n],由于ans[n-1]+f(n),当中f(n)表示小于n的数与n的gcd之和 问题 ...
- UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.
题意: 这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N 分析: 坐标轴上有四个可见的点,因为每个象限可见的点数都是一样 ...
- UVA 11424 GCD - Extreme (I) (欧拉函数+筛法)
题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n) 此 ...
随机推荐
- [转] ASP.NET MVC 模型绑定的功能和问题
摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术, ...
- Grunt - 安装指南
发现周围有些人对前端存在偏见. 他们认为前端只是用没那么复杂的技术对着界面调来调去,一点点打磨,最后做出一个没什么实用价值的“花瓶”. 其实,前端的技术栈并不简单,比如我们可以用Grunt进行一些自动 ...
- git分支简介,理解HEAD,master
为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...
- 解决Coursera平台上Andrew.Ng的机器学习课程无法正常提交编程作业的问题
课程链接:https://www.coursera.org/learn/machine-learning/home/welcome 我使用的环境是MATLAB R2016a,Win10系统. 执行su ...
- js小练习-移除数组中的元素
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 代码: <!DOCTYPE HTML><html> <he ...
- CSS3 @font-face实现颜色大小可控的三角效果——张鑫旭
一.我之前介绍过的三角实现效果回顾 这里所说的三角效果之等腰直角三角形效果(等边三角形有现成字符实现,没什么好说的:还有图片实现三角众人皆知,不予以说明): 1. 字符实现三角效果关于字符实现三角我早 ...
- jQuery 遮盖层弹出后禁止页面滚动
css部分 .ovfHiden{ overflow: hidden; height: 100%; } js部分 $(".btn1").click(funct ...
- 通过ifrmae异步下载文档
//通过ifrmae异步下载文档 function iframeGetFile(opts) { var defaultOpts = { filePath: '', onload: function ( ...
- js面向对象设计之function类
本文仅探讨如何合理的使用 function 在 javascript中实现一个面向对象设计的类.总所周知,javascript 并不能实现一个真正意义上的类,比如 protect 比如 函数重载.下面 ...
- github上手实践教程
简介: SSH公私钥的使用 github的使用 git 工具的基本使用 基本步骤: 一.github的使用 1.github账号的创建[官网一步一步创建就行了,这一步骤省略] 2.创建远程仓库: 创建 ...