POJ3090Visible Lattice Points
2021/7/30 23:10:08
本文主要是介绍POJ3090Visible Lattice Points,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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 }
这篇关于POJ3090Visible Lattice Points的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享