jzoj3509-倒霉的小C【gcd,欧拉函数】
正题
大意
画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∑ngcd(n,i)
但是暴力枚举会超时,我们需要想别的方法
∑i=1ngcd(n,i)=d\sum_{i=1}^n gcd(n,i)=di=1∑ngcd(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∑nd∗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∑nd∗i=1∑ngcd(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∑nd×φ(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,欧拉函数】相关推荐
- [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\ ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛
F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...
- HDU 2588 GCD(欧拉函数)
GCD 思路 题目要求,对于给定的n,mn, mn,m要求有多少数∑i=1ngcd(i,n)>=m\sum _{i = 1} ^{n} gcd(i, n) >= m∑i=1ngcd(i, ...
- 中gcd函数_欧拉函数φ(n)的计算及欧拉定理
1 欧拉函数定义 在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(totient fun ...
- 小a与黄金街道(欧拉函数)/**模运算规则总结*/
链接:https://ac.nowcoder.com/acm/contest/317/D 来源:牛客网 题目描述 小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们 ...
- 陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】...
链接:https://www.nowcoder.com/acm/contest/121/J 来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的 ...
- 算法 {欧拉函数,欧拉定理,费马小定理}
欧拉函数 定义 ϕ ( x ) , x ∈ N + \phi(x), \ \ x \in N^+ ϕ(x), x∈N+ means the number of y ∈ N + y \in N^+ y ...
- 初等数论--同余--欧拉函数、欧拉定理、费马小定理
初等数论--同余--欧拉函数.欧拉定理.费马小定理 概念 同余类,既约同余类 欧拉函数 完全剩余系,既约剩余系 关于完全剩余系.既约剩余系一些比较简单的定理 欧拉定理.费马小定理 博主是初学初等数论( ...
- hdu (欧拉函数+容斥原理) GCD
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...
最新文章
- SQL Server实用操作小技巧集合
- 《Nature》:衰老后的核糖体发生了哪些致病变化
- Ubuntu系统版本升级(提前版)
- java中的localDate类_java8-LocalDate类
- 进程线程003 模拟线程切换
- exchange 2010 日志规则应用之审计邮箱
- python的运算顺序和c一样吗,【Python】Python 对比 C语言的差异
- JQuery 中选择多选择框,和单选框,实现获取相应选择的值
- 关于编程思想的一点思考
- 推荐您使用 Markdown 来编辑文章
- 该服务器支持最多2100个参数,Mybatis批量查询拼装参数超长的解决办法
- 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
- 实对称矩阵的特征值求法_梳理:矩阵对角化
- JavaScript学习手册十一:JSON
- 微信小程序顶部tab切换
- TCP四次挥手中的2MSL是什么?
- 学会理解和更新kali软件源
- 我们一起写opengl程序
- 华为鸿蒙系统落地,鸿蒙系统正式落地!华为养的“这只狼”,终于派上用场了?...
- 笔记本电脑桌面上计算机打不开怎么办,笔记本电脑开了机一直进不去桌面怎么办...
热门文章
- 刷新mac地址命令_配置好Cisco交换机需要熟悉IOS命令及相关的知识
- vue预加载动态生成runtime.js_预渲染 prerender-spa-plugin 避坑指南
- 后端学习 - Java基础
- 7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!
- C++二维数组作为函数参数
- [JavaWeb-HTML]HTML标签_列表标签
- AcWing 788 逆序对的数量-归并排序
- hdu2544 最短路-邻接表+优先队列实现dijkstra
- 算法-排序-计数排序(包含对非负数和整数的排序)
- word List 14