ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

POJ3090Visible Lattice Points

2021-07-30 22:31:27  阅读:186  来源: 互联网

标签:phi 函数 ll long Lattice Points POJ3090Visible include 欧拉


http://poj.org/problem?id=3090

对于此题,观测点的数目,从小规模开始观察,可以得到每一个点,由一根无限长的绳子,绕着原点旋转,得到的第一个点。换另外一个思路,每一个观察到的点,都是子矩阵的一个边界点,也就是说枚举每一个子矩阵的点即可,而对于重合的点,则是已经出现的点,也就是可以约分的点,斜率可以看出。那么也就是欧拉函数,通过线性筛欧拉函数,然后对于每一个询问,直接计算欧拉函数和即可。

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cstring>
 4 #include<math.h>
 5 #include<algorithm> 
 6 using namespace std;
 7 typedef long long ll;
 8 const ll N=1e3+520;
 9 bool vis[N];
10 ll phi[N],p[N],cnt;
11 ll n,ans,t;
12 void euler()
13 {
14     phi[1]=1;
15     for(int i=2;i<=N;i++)
16     {
17         if(!vis[i]) p[cnt++]=i,phi[i]=i-1;
18         for(int j=0;p[j]<=N/i;j++)
19         {
20             vis[p[j]*i]=1;
21             if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}
22             phi[i*p[j]]=phi[i]*(p[j]-1);
23         }
24     }
25 }
26 int main()
27 {
28     euler();
29     scanf("%lld",&t);
30     for(int i=1;i<=t;i++)
31     {
32         scanf("%lld",&n);
33         ans=0;
34         for(int j=1;j<=n;j++) ans+=phi[j];
35         printf("%d %lld %lld\n",i,n,ans*2+1); 
36     }
37     return 0;
38  } 

 

标签:phi,函数,ll,long,Lattice,Points,POJ3090Visible,include,欧拉
来源: https://www.cnblogs.com/Astronaut0142/p/15082765.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有