201. 可见的点

在一个平面直角坐标系的第一象限内,如果一个点 (x,y) 与原点 (0,0) 的连线中没有通过其他任何点,则称该点在原点处是可见的。

例如,点 (4,2) 就是不可见的,因为它与原点的连线会通过点 (2,1)

部分可见点与原点的连线如下图所示:

image

编写一个程序,计算给定整数 N 的情况下,满足 0xyN 的可见点 (xy) 的数量(可见点不包括原点)。

输入格式

第一行包含整数 C,表示共有 C 组测试数据。

每组测试数据占一行,包含一个整数 N

输出格式

每组测试数据的输出占据一行。

应包括:测试数据的编号(从 1 开始),该组测试数据对应的 N 以及可见点的数量。

同行数据之间用空格隔开。

数据范围

1N,C1000

输入样例:

4 2 4 5 231

输出样例:

1 2 5 2 4 13 3 5 21 4 231 32549

解题思路

欧拉函数

对于第一象限中的点对 (x,y) 可见当且仅当 gcd(x,y)=1 时可见

证明:设可见点为 (x0,y0),则其所在直线为 y=y0x0x,如果 gcd(x,y)1,则会存在{x=x0gcd(x0,y0)y=y0gcd(x0,y0) 使得 (x,y) 会挡住 (x0,y0),这与 (x0,y0) 可见矛盾,所有对于可见点有:gcd(x,y)=1,而其沿对角线对称,对于对角线的一边,对于每一行就是求该行的欧拉函数,将所有行的欧拉函数相加 ×2+1 即为最终答案

  • 时间复杂度:O(nt)

代码

// Problem: 可见的点 // Contest: AcWing // URL: https://www.acwing.com/problem/content/description/203/ // Memory Limit: 64 MB // Time Limit: 1000 ms // %%%Skyqwq #include <bits/stdc++.h> #define pb push_back #define fi first #define se second #define mp make_pair using namespace std; typedef long long LL; typedef pair<int, int> PII; template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; } template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; } template <typename T> void inline read(T &x) { int f = 1; x = 0; char s = getchar(); while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); } while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar(); x *= f; } const int N=1e3+5; int T,n,prime[N],m,v[N],phi[N]; void euler(int n) { memset(v,0,sizeof v); phi[1]=1; for(int i=2;i<=n;i++) { if(v[i]==0) { v[i]=i; prime[++m]=i; phi[i]=i-1; } for(int j=1;j<=m;j++) { if(i*prime[j]>n||v[i]<prime[j])break; v[i*prime[j]]=prime[j]; phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-1:prime[j]); } } } int main() { euler(1000); scanf("%d",&T); for(int t=1;t<=T;t++) { scanf("%d",&n); int res=0; for(int i=1;i<=n;i++)res+=phi[i]; res*=2; res++; printf("%d %d %d\n",t,n,res); } return 0; }

__EOF__

本文作者acwing_zyy
本文链接https://www.cnblogs.com/zyyun/p/15843443.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zyy2001  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示