Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
/**
题目:Trees in a Wood. UVA 10214
链接:https://vjudge.net/problem/UVA-10214
题意:给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
思路:
坐标轴上结果为4,其他四个象限和第一个象限看到的数量一样。所以求出x在[1,a]和y在[1,b]的x/y互质对数即可。
由于a比较小,所以枚举x,然后求每一个x与[1,b]的互质对数。
方法:
1<=y<=x; 那么phi(x)为结果。
x+1<=y<=2*x; 那么phi(x)为结果。因为gcd(x+i,x) = gcd(x,i);
2*x+1<=y<=3*x; 同理
.
.
k*x+1<=y<=b; 直接暴力枚举判断即可了 当然求x与[1,b]范围内的互质对数还可以使用容斥做法。求出x的所有素因子。
求b范围内有多少个数与x含有至少一个相同的素因子。由于会出现重复计算,所以容斥处理。
*/ #include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 2e3+;
int a, b;
int phi[maxn];
void init()
{
for(int i = ; i < maxn; i++) phi[i] = i;
for(int i = ; i < maxn; i+=) phi[i]/=;
for(int i = ; i < maxn; i+=){
if(phi[i]==i){
for(int j = i; j < maxn; j+=i){
phi[j] = phi[j]/i*(i-);
}
}
}
}
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
ll f(int a)
{
return 1LL**a+;
}
int main()
{
init();
while(scanf("%d%d",&a,&b)==&&a){
ll ans = ;
for(int i = ; i <= a; i++){
ans += b/i*phi[i];
int st = b/i*i+;
int et = b/i*i+b%i;
for(int j = st; j <= et; j++){
if(gcd(i,j)==) ans++;
}
}
printf("%.7lf\n",(ans*+)*1.0/(f(a)*f(b)-));
}
return ;
}
莫比乌斯做法: #include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 2e3+;
int a, b;
int mu[maxn];
int prime[maxn], tot;
void init()
{
mu[] = ;
tot = ;
for(int i = ; i < maxn; i++){
if(prime[i]==){
prime[++tot] = i;
mu[i] = -;
}
for(int j = ; prime[j]*i<maxn; j++){
prime[prime[j]*i] = ;
if(i%prime[j]==){
mu[prime[j]*i] = ;
break;
}
mu[prime[j]*i] = -mu[i];
}
}
}
ll f(int a)
{
return 1LL**a+;
}
int main()
{
init();
while(scanf("%d%d",&a,&b)==&&a){
ll ans = ;
/*for(int i = 1; i <= a; i++){
ans += b/i*phi[i];
int st = b/i*i+1;
int et = b/i*i+b%i;
for(int j = st; j <= et; j++){
if(gcd(i,j)==1) ans++;
}
}*/
int mis = min(a,b);
for(int i = ; i <= mis; i++){
ans += mu[i]*1LL*(a/i)*(b/i);
}
printf("%.7lf\n",(ans*+)*1.0/(f(a)*f(b)-));
}
return ;
}
Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。的更多相关文章
- Trees in a Wood UVA - 10214 欧拉函数模板
太坑惹,,,没用longlong各种WA #include <iostream> #include <string.h> #include <cstdio> #in ...
- GuGuFishtion HDU - 6390 (欧拉函数,容斥)
GuGuFishtion \[ Time Limit: 1500 ms\quad Memory Limit: 65536 kB \] 题意 给出定义\(Gu(a, b) = \frac{\phi(ab ...
- UVa 10837 (欧拉函数 搜索) A Research Problem
发现自己搜索真的很弱,也许做题太少了吧.代码大部分是参考别人的,=_=|| 题意: 给出一个phi(n),求最小的n 分析: 回顾一下欧拉函数的公式:,注意这里的Pi是互不相同的素数,所以后面搜索的时 ...
- UVa 11440 (欧拉函数) Help Tomisu
题意: 给出N和M,统计区间x ∈ [2, N!],x满足所有素因子都大于M的x的个数. 分析: 首先将问题转化一下,所有素因子都大于M 等价于 这个数与M!互素 对于k大于M!,k与M!互素等价于 ...
- UVA 11426 (欧拉函数&&递推)
题意:给你一个数N,求N以内和N的最大公约数的和 解题思路: 一开始直接想暴力做,4000000的数据量肯定超时.之后学习了一些新的操作. 题目中所要我们求的是N内gcd之和,设s[n]=s[n-1] ...
- UVA - 11426 欧拉函数(欧拉函数表)
题意: 给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和. 思路: f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和. sum[n]=f[1 ...
- UVa 11426 (欧拉函数 GCD之和) GCD - Extreme (II)
题意: 求sum{gcd(i, j) | 1 ≤ i < j ≤ n} 分析: 有这样一个很有用的结论:gcd(x, n) = i的充要条件是gcd(x/i, n/i) = 1,因此满足条件的x ...
- UVA 10820 欧拉函数模板题
这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ...
- GCD - Extreme (II) UVA - 11426 欧拉函数与gcd
题目大意: 累加从1到n,任意两个数的gcd(i,j)(1=<i<n&&i<j<=n). 题解:假设a<b,如果gcd(a,b)=c.则gcd(a/c,b ...
随机推荐
- iOS UILabel自定义行间距
NSString *hintStr = @"输入材料标题搜索材料\n注:可根据材料序号直接搜索, 如TPO23"; CGSize size = [toolset returnTex ...
- ExtJS 4 在Ext.tab.Panel中使用Ext.ux.IFrame打开url指向的网页
ext-4.2.1.883\examples\ux\IFrame.js ext-4.2.1.883\examples\ux\TabCloseMenu.js 复制到 \Scripts\ext-4.2.1 ...
- Node.js的集群功能以及在Express的配置
Node.js在v0.6.0版本下内置了集群功能,作为cluster模块,用于nodejs的多核处理,也比较容易通过脚本实现一个负载均衡的集群. 脚本参考了其他人的材料,建立一个server.js(因 ...
- linux下GPRS模块的应用程序
---------------------------------------------------------------------------------------------------- ...
- .NET中的CTS、CLS、CLR
一.解释1 1.CLR(Common Language Runtime) :公共语言运行库 CLR 是CTS(Common Type System:通用类型系统)的实现, 即是说:CLR是应用程序的执 ...
- 如何格式化被压缩的JS代码以方便阅读
本文分两部分: 1.转载部分 2.个人补充部分 1.主题内容转载83,http://www.madeby83.com/unzip-the-js-code.html 我们经常可以看到一些网站,把所需的j ...
- 一起來玩鳥 Starling Framework(4)TouchEvent,Touch,以及TouchPhase
這一篇來介紹一下TouchEvent.我們先來談單點的touch,下一篇再介紹MultiTouch.翻過Starling文件的應該會發現,Starling裡面沒有MouseEvent,而是整合在Tou ...
- volatile型变量自增操作的隐患
用FindBugs跑自己的项目,报出两处An increment to a volatile field isn't atomic.对应报错的代码例如以下: volatile int num = ...
- Hadoop之Hbase详解
1.什么是Hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统, hbase是列式的分布式数据库 1.2.HBASE优势: 1)线性扩展,随着数据量增多可以通过节点扩展进行支撑 ...
- Python 自用代码(知网会议论文网页源代码清洗)
#coding=utf-8 from pymongo import MongoClient from lxml import etree import requests jigou = u" ...