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) 变换 ...
随机推荐
- Notepad++ 运行脚本快捷键设置
php:cmd /k /path/to/php.exe "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT pyth ...
- hbase on spark
1.在spark的伪分布式环境下安装HBASE (1)版本:我使用的spark版本是1.3.0,使用的hbase版本是hbase-0.94.16 (2)解压,tar zxvf hbase-0.94. ...
- android 注销
1.在个人中心退出系统MainActivity 2.清空保存的登录数据 3.打开登录LoginActivity 方法: SharedPreferencesManager.getInstance(mCo ...
- 内容自适应UILabel
xcode 6.1 File-New-Project.. iOs-Application-Simple View Application 代码: - (void)viewDidLoad { [supe ...
- Oracle监听器—静态注册
注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名一样,也有可能不一样. 注册分: 1. 静 ...
- linux标准输入输出重定向
command > filename 把标准输出重定向到一个文件,如果文件不存在则新建,如果存在则覆盖其内容.command >> filename 把标准输出重定向到一个文件中,如 ...
- PHP - PDO 之 mysql 事务功能
<?php /* pdo 学习 */ $dsn = 'mysql:host=localhost;dbname=cswl';//构建连接dsn $db = new pdo($dsn,'root', ...
- 【BZOJ 1054】 [HAOI2008]移动玩具
Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...
- (转)汇编bne的问题
网址:http://blog.csdn.net/lwj103862095/article/details/8073571 memsetup: @ 设置存储控制器以便使用SDRAM等外设 mov ...
- 查网卡信息(千M o 万M)