正题


大意

画n条线,每次坐标变换为(x+n,y+(−1)(i+1)∗i)(i=1∼n)(x+n,y+(-1)^{(i+1)}*i) \ \ \ (i=1\sim n)(x+n,y+(−1)(i+1)∗i)   (i=1∼n)。给出n,求线穿过的格点数。


解题思路

首先我们想穿过格点的问题,我们可以无视方向,然后每次就当从(0,0)(0,0)(0,0)到(n,i)(n,i)(n,i)划一条线。然后我们可以发现穿过的格点数(算上起点)就是gcd(n,i)gcd(n,i)gcd(n,i),因为每次都会穿过(n/j,i/j)(j=1∼gcd(n,i))(n/j,i/j)\ \ \ (j=1\sim gcd(n,i))(n/j,i/j)   (j=1∼gcd(n,i))这些点。
然后我们可以知道答案就是
1+∑i=1ngcd(n,i)1+\sum_{i=1}^n gcd(n,i)1+i=1∑n​gcd(n,i)
但是暴力枚举会超时,我们需要想别的方法
∑i=1ngcd(n,i)=d\sum_{i=1}^n gcd(n,i)=di=1∑n​gcd(n,i)=d
=>∑d=1nd∗∑i=1n(gcd(i,n)==d)=>\sum_{d=1}^n d*\sum ^n_{i=1}(gcd(i,n)==d)=>d=1∑n​d∗i=1∑n​(gcd(i,n)==d)
∑d=1nd∗∑i=1ngcd(i/d,n/d)=1\sum_{d=1}^n d*\sum ^n_{i=1}gcd(i/d,n/d)=1d=1∑n​d∗i=1∑n​gcd(i/d,n/d)=1
因为要求gcd(i/d,n/d)=1gcd(i/d,n/d)=1gcd(i/d,n/d)=1,所以i的个数就是φ(n/d)\varphi(n/d)φ(n/d)
所以答案就是
∑d=1nd×φ(n/d)\sum_{d=1}^n d\times \varphi(n/d)d=1∑n​d×φ(n/d)
由于要求n/dn/dn/d是整数,所以我们可以化为
1+∑d∣nd×φ(n/d)1+\sum_{d|n} d\times \varphi(n/d)1+d∣n∑​d×φ(n/d)
然后暴力枚举约数和暴力求欧拉函数值时间复杂度为O(nlogn)O(\sqrt n\ \ log\ n)O(n​  log n)


代码

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n,ans=1;
ll phi(ll n)//求欧拉函数
{ll ans=n;for (ll i=2;i*i<=n;i++)if (n%i==0){ans=ans/i*(i-1);while (n%i==0) n/=i;}if (n>1) ans=ans/n*(n-1);return ans;
}
int main()
{//freopen("beats.in","r",stdin);//freopen("beats.out","w",stdout);scanf("%lld",&n);for (ll i=1;i*i<=n;i++){if (!(n%i)) {ans+=phi(n/i)*i;if (i*i!=n) ans+=n/i*phi(i);}//求约数}printf("%lld",ans);return 0;
}

jzoj3509-倒霉的小C【gcd,欧拉函数】相关推荐

  1. [BZOJ2818][P2568]Gcd[欧拉函数]

    \(gcd(x,y)=p | p∈P\) \(gcd(x_1\times p,y_1\times p) = p\) \(gcd(x_1,y_1)=1\) 每个素数的贡献是对于\([1,\lfloor\ ...

  2. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛

    F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...

  3. HDU 2588 GCD(欧拉函数)

    GCD 思路 题目要求,对于给定的n,mn, mn,m要求有多少数∑i=1ngcd(i,n)>=m\sum _{i = 1} ^{n} gcd(i, n) >= m∑i=1n​gcd(i, ...

  4. 中gcd函数_欧拉函数φ(n)的计算及欧拉定理

    1 欧拉函数定义 在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(totient fun ...

  5. 小a与黄金街道(欧拉函数)/**模运算规则总结*/

    链接:https://ac.nowcoder.com/acm/contest/317/D 来源:牛客网 题目描述 小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们 ...

  6. 陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】...

    链接:https://www.nowcoder.com/acm/contest/121/J 来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的 ...

  7. 算法 {欧拉函数,欧拉定理,费马小定理}

    欧拉函数 定义 ϕ ( x ) , x ∈ N + \phi(x), \ \ x \in N^+ ϕ(x),  x∈N+ means the number of y ∈ N + y \in N^+ y ...

  8. 初等数论--同余--欧拉函数、欧拉定理、费马小定理

    初等数论--同余--欧拉函数.欧拉定理.费马小定理 概念 同余类,既约同余类 欧拉函数 完全剩余系,既约剩余系 关于完全剩余系.既约剩余系一些比较简单的定理 欧拉定理.费马小定理 博主是初学初等数论( ...

  9. hdu (欧拉函数+容斥原理) GCD

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...

最新文章

  1. SQL Server实用操作小技巧集合
  2. 《Nature》:衰老后的核糖体发生了哪些致病变化
  3. Ubuntu系统版本升级(提前版)
  4. java中的localDate类_java8-LocalDate类
  5. 进程线程003 模拟线程切换
  6. exchange 2010 日志规则应用之审计邮箱
  7. python的运算顺序和c一样吗,【Python】Python 对比 C语言的差异
  8. JQuery 中选择多选择框,和单选框,实现获取相应选择的值
  9. 关于编程思想的一点思考
  10. 推荐您使用 Markdown 来编辑文章
  11. 该服务器支持最多2100个参数,Mybatis批量查询拼装参数超长的解决办法
  12. 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
  13. 实对称矩阵的特征值求法_梳理:矩阵对角化
  14. JavaScript学习手册十一:JSON
  15. 微信小程序顶部tab切换
  16. TCP四次挥手中的2MSL是什么?
  17. 学会理解和更新kali软件源
  18. 我们一起写opengl程序
  19. 华为鸿蒙系统落地,鸿蒙系统正式落地!华为养的“这只狼”,终于派上用场了?...
  20. 笔记本电脑桌面上计算机打不开怎么办,笔记本电脑开了机一直进不去桌面怎么办...

热门文章

  1. 刷新mac地址命令_配置好Cisco交换机需要熟悉IOS命令及相关的知识
  2. vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南
  3. 后端学习 - Java基础
  4. 7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!
  5. C++二维数组作为函数参数
  6. [JavaWeb-HTML]HTML标签_列表标签
  7. AcWing 788 逆序对的数量-归并排序
  8. hdu2544 最短路-邻接表+优先队列实现dijkstra
  9. 算法-排序-计数排序(包含对非负数和整数的排序)
  10. word List 14