题意:

这道题和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.的更多相关文章

  1. BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2534  Solved: 1129 [Submit][Status][Discu ...

  2. 【BZOJ2226】[Spoj 5971] LCMSum 莫比乌斯反演(欧拉函数?)

    [BZOJ2226][Spoj 5971] LCMSum Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n ...

  3. 【BZOJ2818】Gcd(莫比乌斯反演,欧拉函数)

    题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对 1<=N<=10^7 思路:莫比乌斯反演,同BZOJ2820…… ; ..max]of ...

  4. 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) 此 ...

  5. UVa 10820 (打表、欧拉函数) Send a Table

    题意: 题目背景略去,将这道题很容易转化为,给出n求,n以内的有序数对(x, y)互素的对数. 分析: 问题还可以继续转化. 根据对称性,我们可以假设x<y,当x=y时,满足条件的只有(1, 1 ...

  6. UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...

  7. UVA 11426 GCD - Extreme (II) 欧拉函数

    分析:枚举每个数的贡献,欧拉函数筛法 #include <cstdio> #include <iostream> #include <ctime> #include ...

  8. 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 ...

  9. LightOJ 1375 - LCM Extreme 莫比乌斯反演或欧拉扩展

    题意:给出n [1,3*1e6] 求 并模2^64. 思路:先手写出算式 观察发现可以化成 那么关键在于如何求得i为1~n的lcm(i,n)之和.可以知道lcm(a,b)为ab/gcd(a,b) 变换 ...

随机推荐

  1. WPF学习笔记4——Layout之2

    下面简单介绍常见的面板. 一.Grid 1.Grid关于调整行列距离有三种方法:绝对大小,自动大小,比例大小.如下: <ColumnDefinition Width="100" ...

  2. 如何应用CLR线程池来管理多线程

        class Program     {         static void Main(string[] args)         {             int intWorkerT ...

  3. Castle ActiveRecord简单介绍

    Castle ActiveRecord框架是一个基于.NET的ORM框架,它实现了ActiveRecord设计模式.它本身就是基于NHibernate,只是封 装了NHibernate的大部分烦杂细节 ...

  4. 实时数据处理环境搭建flume+kafka+storm:3.kafka安装

    1.  解压  tar -zxvf   2.配置/app/kafka_2.9.2-0.8.1.1/config/server.properties     #标识--     broker.id=0 ...

  5. Maven 解决JAR包冲突

    在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择  “Dependency  Hierarchy” 2 ...

  6. Javascript中Array.prototype.map()详解

    map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数.callback 每次执行后的返回值组合起来形成一个新数组. callback 函数只会在有值的索引上被调用:那些从来没被赋 ...

  7. PAT-乙级-1036. 跟奥巴马一起编程(15)

    1036. 跟奥巴马一起编程(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 美国总统奥巴马不仅呼吁所有人 ...

  8. 如何设置Samza的metrics

    参考这个里边对API的调用 http://samza.incubator.apache.org/learn/documentation/0.7.0/container/metrics.html 参考这 ...

  9. QueryPerformanceFrequency 和 QueryPerformanceCounter用法

    QueryPerformanceFrequency() - 基本介绍 类型:Win32API 原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFr ...

  10. 使用rsyslog+loganalzey收集日志显示客户端ip

    http://www.ituring.com.cn/article/128536 rsyslog localhost 转发 http://bigsec.net/one/tool/rsyslog.htm ...