UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.
题意:
这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N

分析:
坐标轴上有四个可见的点,因为每个象限可见的点数都是一样的,所以我们只要求出第一象限可见的点数然后×4+4,即是K。
可见的点满足gcd(x, y) = 1,于是将问题转化为x∈[1, a], y∈[1, b],求gcd(x, y) = 1的个数。
类比HDU 1695可以用莫比乌斯反演来做,我还写了普通的和分块加速的两份代码,交上去发现运行时间相差并不是太多。
#include <cstdio>
#include <algorithm>
typedef long long LL; const int maxn = ;
int mu[maxn+], vis[maxn+], prime[maxn]; void Mobius()
{
mu[] = ;
int cnt = ;
for(int i = ; i <= maxn; ++i)
{
if(!vis[i])
{
mu[i] = -;
prime[cnt++] = i;
}
for(int j = ; j < cnt && (LL)i*prime[j] <= maxn; ++j)
{
vis[i*prime[j]] = ;
if(i % prime[j] != ) mu[i*prime[j]] = -mu[i];
else
{
mu[i*prime[j]] = ;
break;
}
}
}
//计算前缀和,用于分块加速
for(int i = ; i <= ; ++i) mu[i] += mu[i-]; } int main()
{
Mobius();
int a, b;
while(scanf("%d%d", &a, &b) == )
{
if(a == && b == ) break;
LL K = , N = (LL)(a*+) * (b*+) - ;
if(a > b) std::swap(a, b);
for(int i = , j; i <= a; i = j + )
{
j = std::min(a/(a/i), b/(b/i));
K += (LL)(mu[j] - mu[i-]) * (a/i) * (b/i);
}
//for(int i = 1; i <= a; ++i) K += (LL) mu[i] * (a/i) * (b/i);
K = (K+)*; printf("%.7f\n", (double) K / N);
} return ;
}
代码君
也可以按照紫书上的思路求欧拉函数,因为a的范围比较小,所以可以逐列统计。不过这个方法要比上面的莫比乌斯反演慢得多,试验了下,不管是打表还是单独计算时间都差不多
#include <cstdio>
#include <cmath>
typedef long long LL; int phi(int n)
{
int m = sqrt(n + 0.5);
int ans = n;
for(int i = ; i <= m; ++i) if(n % i == )
{
ans = ans / i * (i-);
while(n % i == ) n /= i;
}
if(n > ) ans = ans / n * (n-);
return ans;
} int gcd(int a, int b)
{
return b == ? a : gcd(b, a%b);
} int main()
{
int a, b;
while(scanf("%d%d", &a, &b) == && a)
{
LL N = (LL)(a*+) * (b*+) - ;
LL K = ;
for(int x = ; x <= a; ++x)
{
int k = b / x;
K += phi(x) * k;
for(int y = k*x+; y <= b; y++)
if(gcd(x, y) == ) K++;
}
K = (K+)*;
printf("%.7f\n", (double)K / N);
} return ;
}
代码君二
UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.的更多相关文章
- BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2534 Solved: 1129 [Submit][Status][Discu ...
- 【BZOJ2226】[Spoj 5971] LCMSum 莫比乌斯反演(欧拉函数?)
[BZOJ2226][Spoj 5971] LCMSum Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n ...
- 【BZOJ2818】Gcd(莫比乌斯反演,欧拉函数)
题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对 1<=N<=10^7 思路:莫比乌斯反演,同BZOJ2820…… ; ..max]of ...
- 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) 此 ...
- UVa 10820 (打表、欧拉函数) Send a Table
题意: 题目背景略去,将这道题很容易转化为,给出n求,n以内的有序数对(x, y)互素的对数. 分析: 问题还可以继续转化. 根据对称性,我们可以假设x<y,当x=y时,满足条件的只有(1, 1 ...
- UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...
- UVA 11426 GCD - Extreme (II) 欧拉函数
分析:枚举每个数的贡献,欧拉函数筛法 #include <cstdio> #include <iostream> #include <ctime> #include ...
- UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)
Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...
- LightOJ 1375 - LCM Extreme 莫比乌斯反演或欧拉扩展
题意:给出n [1,3*1e6] 求 并模2^64. 思路:先手写出算式 观察发现可以化成 那么关键在于如何求得i为1~n的lcm(i,n)之和.可以知道lcm(a,b)为ab/gcd(a,b) 变换 ...
随机推荐
- 【Python笔记】异常处理
1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...
- eclipse 安装egit 成功后Team中没有显示
主要是版本不太对. 在http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_EGit.3F 中找到对应的版本,设置就O ...
- 【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)
讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增. ]={21.1, 32.8, 23.4, 45.2, 37.4 }; double *pt=arr; //pt指针指向arr[0 ...
- 新的MOVE结构,和在项目中实际的感受
关于MVC/MVP的瑕疵 MVC 和 MVP是最简单,最脍炙人口的框架结构. 有一段时间, 凡事有一定规模的代码,我都会架在上面,甚至后台程序也不例外(预留出可以注册的用户交互接口,作为后台控制器). ...
- SQL Server 2008 的gis函数
居然不知道sql有gis函数,孤陋寡闻了 https://msdn.microsoft.com/zh-cn/library/bb933904.aspx STContains(geometry 数据 ...
- 【多路复用】I/O多路复用
http://www.tuicool.com/articles/RBvqUz C#下用select方法实现socket服务端
- shutdown彻底关闭tomcat,以及多线程关闭
最近做的一个Web项目,发现shutdown.sh后,无法关掉tomcat进程. ps -ef | grep tomcat 返回tomcat进程仍然存在.经过调查发现是因为在Web应用中启动了线程池, ...
- java 构造函数
1.public className(){}. 2.名称与类名相同,无返回值,无返回类型,void也不行.(就是上边的形式,除了可以有参数). 3.有0个或多个参数. 4.每个类都至少有一个const ...
- sql with递归
with temp as ( select Id, UserId, OfficeID, RoleId, DeptId, IsDelete, IsEnd, ParentId from [dbo]. ...
- PHPCMS搭建wap手机网站
PHPCMS搭建PC端网站比较方便,但是在wap手机端方面却不怎么实用,而且自带的手机建站感觉不是很好,而且模版不好控制,现在对其进行修改,手机建站个人感觉比较方便 首先在phpcms/libs/fu ...