POJ 3090

由于是对称的图形只要求一边得出sum;sum=sum*2+1就好了把起点定为原点,建立坐标系,能看到的点与原点连线的斜率是不一样的,也就是说,点(X,Y)K=Y/X(K<1)每一个K要不同;1/2出现了2/4就不能出现,从1开始计算,也就是要找分子与分母不能约分的斜率;想到的就是欧拉函数;

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
#define max 1010
ll phi[max];
int n;
void getphi(){
	for(int i=0;i<max;i++)phi[i]=0;
	phi[1]=1;
	for(int i=2;i<max;i++){
		if(!phi[i]){
			for(int j=i;j<max;j+=i){
				if(!phi[j])phi[j]=j;
				phi[j]=phi[j]/i*(i-1);
			}
		}
	}

}
int main(){
	getphi();
	int c;
	//freopen("test.txt","r",stdin);
	cin>>c;
	for(int i=1;i<=c;i++){
		cin>>n;
		ll sum=0;
		for(int i=0;i<=n;i++){
			sum+=phi[i];
		}
		cout<<i<<" "<<n<<" "<<1+2*sum<<endl;
	}
}

POJ 3090

时间: 2024-11-03 22:28:19

POJ 3090的相关文章

POJ 3090 Visible Lattice Points 欧拉函数

链接:http://poj.org/problem?id=3090 题意:在坐标系中,从横纵坐标 0 ≤ x, y ≤ N中的点中选择点,并且这些点与(0,0)的连点不经过其他的点. 思路:显而易见,x与y只有互质的情况下才会发生(0,0)与(x,y)交点不经过其他的点的情况,对于x,y等于N时,可以选择的点均为小于等于N并且与N互质的数,共Euler(N)个,并且不重叠.所以可以得到递推公式aa[i]=aa[i]+2*Euler(N). 代码: #include <iostream> #in

POJ 3090 Visible Lattice Points

Description A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), other than the origin, is visible from the origin if the line from (0, 0) to (x, y) does not pass through any other lattice point. For example

poj 3090 &amp;&amp; poj 2478(法雷级数,欧拉函数)

http://poj.org/problem?id=3090 法雷级数 法雷级数的递推公式很简单:f[1] = 2; f[i] = f[i-1]+phi[i]. 该题是法雷级数的变形吧,答案是2*f[i]-1. #include <stdio.h> #include <iostream> #include <map> #include <set> #include <stack> #include <vector> #include

POJ 3090 Visible Lattice Points 法雷级数

题目来源:POJ 3090 Visible Lattice Points 题意:哪些点可以看到 思路: F1: 0/1 1/1 F2: 0/1 1/2 1/1 F3: 0/1 1/3 1/2 2/3 1/1 F4: 0/1 1/4 1/3 1/2 2/3 3/4 1/1 F5: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 F6:0/1 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6 1/1 法雷级数 可以看到的那

poj 3090 Visible Lattice Points 法雷级数||打表

由于图像关于对角线对称,所以我们只看下三角区域.将x轴看做分母,被圈的点看成分子 依次是{1/2},{1/3,1/2},{1/4,3/4},{1/5,2/5,3/5,4/5} 写成前缀和的形式就是 {1/2},{1/2,1/3,2/3},{1/2,1/3,1/3,1/4,3/4},{1/2,1/3,1/3,1/4,3/4,1/5,2/5,3/5,4/5} 发现,这就是一个法雷级数,即第k项增加的数就是phi[k].最后的答案*2+(0,1)+(1,0),(1,1)三个点就好了 #include

poj 3090 (欧拉函数,找规律)

poj 3090 (欧拉函数,找规律) 题目: 给出一个n*n的点阵,求从(0,0)出发斜率不相等的直线有多少条. 限制: 1 <= n <= 1000 思路: 先定义sum[i] sum[i] = 0, if(i == 1) sum[i] = sum[i-1] + phi[i], if(i >= 2) ans = sum[n] * 2 + 3 /*poj 3090 题目: 给出一个n*n的点阵,求从(0,0)出发斜率不相等的直线有多少条. 限制: 1 <= n <= 100

【POJ 3090】 Visible Lattice Points

[题目链接] http://poj.org/problem?id=3090 [算法] 通过观察发现,在这个平面直角坐标系中,除了(1,1),(1,0)和(0,1),所有可见点的横纵坐标互质 那么,问题就转化为了求 2 * (phi(1) + phi(2) + ... + phi(n)) + 3 预处理phi的前缀和,O(1)回答询问,即可 [代码] #include <algorithm> #include <bitset> #include <cctype> #inc

poj 3478 poj 3090(欧拉函数的应用)

3478题目意思是Farey序列是由一系列不能约分的分数a/b(0<a<b<=n且gcd(a,b)=1)按照递增的顺序组成的,然后给出了Fn的前几项,让你计算Fn中有多少个分数. 很明显Fn中的数的个数就是分别与(2,3,4.....n-1,n)互质的数的个数的和.也就是求欧拉函数的前n项和. 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <st

数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points

Visible Lattice Points Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5636   Accepted: 3317 Description A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), other than the origin, is visible fr