您的位置:首页 > 编程语言 > C语言/C++

POJ 3090 Visible Lattice Points

2014-11-29 11:55 1216 查看

题目大意

我也说不清。

解题思路

把题目模型转化为求gcd(a,b)=1的对数。
这个题目较简单,求出前2~n的欧拉函数并计算前缀和,然后特别加个3就好

Code

#include <iostream>

using namespace std;

int totalprime;
int prime[1000], v[1000], phi[1000], sum[1000];

void getprime(int n)
{
for (int i = 2; i < n; i++)
{
if (!v[i])
{
prime[totalprime++] = i;
phi[i] = i - 1;
}
for (int j = 0; j < totalprime && i * prime[j] < n; j++)
{
v[i * prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
else
{
phi[i * prime[j]] = phi[i] * (prime[j] - 1);
}
}
}
for (int i = 2; i < n; i++) sum[i] = sum[i - 1] + phi[i];
}

int main()
{
ios::sync_with_stdio(false);
getprime(1001);
int t;
cin >> t;
for (int k = 1; k <= t; k++)
{
int n;
cin >> n;
cout << k << ' ' << n << ' ' << 2 * sum
+ 3 << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 数学数论 c++ poj