POJ3090Visible Lattice Points
2024-10-19 19:12:15
http://poj.org/problem?id=3090
对于此题,观测点的数目,从小规模开始观察,可以得到每一个点,由一根无限长的绳子,绕着原点旋转,得到的第一个点。换另外一个思路,每一个观察到的点,都是子矩阵的一个边界点,也就是说枚举每一个子矩阵的点即可,而对于重合的点,则是已经出现的点,也就是可以约分的点,斜率可以看出。那么也就是欧拉函数,通过线性筛欧拉函数,然后对于每一个询问,直接计算欧拉函数和即可。因为是对称的,所以只要求一半,后面再乘2+加上k=1的那一个就可以了
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 }
最新文章
- C#调用win32 api 操作其它窗口
- 基于注解的Spring AOP的配置和使用
- DOM4J的使用
- C++程序设计(关于函数中数组传递的一点心得)
- 大前端学习笔记整理【七】HTTP协议以及http与https的区别
- ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
- Sublime Text 3安装插件指南
- 【Python】Django 如何直接返回404 被 curl,wget 捕获到
- C语言命名空间
- How to decide on the correct number of clusters?
- linux下安装protobuf教程+示例(详细)
- @Repository @Resource
- 【开发工具 - Git】之Git使用案例
- webAppbuilder微件使用教程2 常用微件介绍
- Spring shiro 初次使用小结
- pod command
- day60 pymysql
- Java中的Cloneable接口理解
- 20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解
- (转)C# 快速高效率复制对象的方式
热门文章
- Linux内核配置-ARP系列
- SQLserver 2014 如何使用Datename()函数获取对应时间
- 熔断和降级的初步详解实现(NET Core控制台输出讲解Polly)
- layout_weight属性分析
- [BUUCTF]PWN8——jarvisoj_level0
- MyBatis 3学习笔记
- CF1428A Box is Pull 题解
- Django的Form表单验证
- Elasticsearch 和 solr 的区别
- 微信公众号开发用户授权登录报";redirect_uri 参数错误";错误