题目大意:给出范围为(0, 0)到(n, n)的整点,你站在原点处,问有多少个整点可见。

线y=x和坐标轴上的点都被(1,0)(0,1)(1,1)挡住了。除这三个钉子外,如果一个点(x,y)不互质,则它就会被点(x0, y0) (x0,y0互质,x/x0==y/y0)挡住。能看见的钉子关于线y=x对称。所以,求出x=2至n的所有与x互质的数的个数φ(x)的和(也就是线y=x右下角(因为φ(x)<x)所有能看见的点的个数)乘以2(对角线两旁的看见的点的个数)+3(那几个特殊点)即为所求。

求φ值时,利用下列性质:

  • if n能整除以p,也能整除以p^2,则φ(n)=φ(n/p)*p
  • if n能整除以p,但不能整除以p^2,则φ(n)=φ(n/p)*(p-1)。

这样,在线性求2至n的质数个数时将i当作n/p,prime[j]作为p,i*prime[j]作为n,(这样i%prime[j]就相当于n/p/p能否整除)同时更新以后的φ值即可。

#include <cstdio>
#include <cstring>
using namespace std; const int MAX_N = 1010; int v[MAX_N], prime[MAX_N], phi[MAX_N]; void Euler(int n)
{
int primeCnt = 0;
memset(v, 0, sizeof(v));
for (int i = 2; i <= n; i++)
{
if (!v[i])
{
prime[primeCnt++] = i;
v[i] = i;
phi[i] = i - 1;
}
for (int j = 0; j < primeCnt && prime[j] <= n / i && prime[j] <= v[i]; j++)
{
v[i * prime[j]] = v[i];
phi[i * prime[j]] = phi[i] * (i%prime[j] ? prime[j] - 1 : prime[j]);
}
}
} int main()
{
int n, testCase;
scanf("%d", &testCase);
for (int i = 1; i <= testCase; i++)
{
scanf("%d", &n);
Euler(n);
int ans = 0;
for (int j = 2; j <= n; j++)
ans += phi[j];
printf("%d %d %d\n", i, n, ans * 2 + 3);
}
return 0;
}

 欧拉筛2:

void Euler(int *phi, int n)
{
static int prime[MAX_N];
static bool NotPrime[MAX_N];
int primeCnt=0;
memset(NotPrime,false,sizeof(NotPrime));
phi[1] = 1;
for(int i = 2; i <= n; i++)
{
if(!NotPrime[i])
{
prime[primeCnt++]=i;
phi[i] = i - 1;
}
for(int j=0; j < primeCnt; j++)
{
if(prime[j] * i > n)
break;
NotPrime[prime[j] * i] = true;
if(i % prime[j] == 0)
{
phi[prime[j] * i] = prime[j] * phi[i];
break;
}
else
phi[prime[j] * i] = (prime[j] - 1) * phi[i];
}
}
}

  

最新文章

  1. [C1] C1FlexGrid 排除非绑定列的验证效果
  2. 梯度下降(Gradient Descent)小结
  3. js 获取滚动条的高度 以及 设置滚动条的高度
  4. HTML学习目录
  5. 【转】Struts1.x系列教程(5):HTML标签库
  6. PHP前端$.ajax传递数据到后台
  7. [Webpack] Use the Webpack Dashboard to Monitor Webpack Operations
  8. (原+转)ubuntu16中莫名死机及重新安装显卡驱动
  9. python的webservice客户端 suds模块使用
  10. Java中的抽象
  11. SourInsight4 配置视野内引用高亮
  12. Jquery 插件 图片验证码
  13. Docker Compose模板文件介绍
  14. CSS 小结笔记之元素的隐藏与显示
  15. 【大数据应用技术】作业八|爬虫综合大作业Molly134
  16. Mongodb开启远程连接并认证
  17. dns记录类型(转)
  18. CodeForces - 1003D
  19. springboot学习(八) 使用jpa访问数据库
  20. [luoguP3355] 骑士共存问题(二分图最大独立集)

热门文章

  1. netty 引用计数对象(reference counted objects)
  2. 运用&lt;body&gt;属性,渲染页面效果
  3. 利用ProgressBar实现旋转loading动画
  4. 安装sql server 2008 R2出现 创建usersettings/microsoft.sqlserver.configuration.landingpage.properties.setter
  5. 45.4.7 序列:USER_SEQUENCES(SEQ)
  6. 读白帽子web安全笔记
  7. codeforces 466B Wonder Room(思维,暴力)
  8. 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法
  9. POJ3617 Best Cow Line【贪心】
  10. PHP循环输出二维数组的数据