出题人来报个到

正题

题目链接:https://www.luogu.com.cn/problem/P6860


题目大意

p(a,b)=1p(a,b)=1p(a,b)=1当且经当一只走a∗ba*ba∗b矩形的马可以走到棋盘上任何一个点
求∑a=1n∑b=1np(a,b)\sum_{a=1}^n\sum_{b=1}^np(a,b)a=1∑n​b=1∑n​p(a,b)


解题思路

这个马能走到全图的充要条件显然是它能走到(0,1)(0,1)(0,1)。考虑给出(a,b)(a,b)(a,b)求它能否走到(0,1)(0,1)(0,1)

首先如果gcd(x,y)≠1gcd(x,y)\neq 1gcd(x,y)​=1显然不行

因为走的顺序无所谓将走的路程分成两段,一段是(x±a,y±b)(x\pm a,y\pm b)(x±a,y±b),一段是(x±b,y±b)(x\pm b,y\pm b)(x±b,y±b)。

显然对于第一段能走到的点可以表示为(2ax,2ay)(2ax,2ay)(2ax,2ay)或(2ax+x,2ay+y)(2ax+x,2ay+y)(2ax+x,2ay+y)。第二段同理。

{2ax=2by2cy=2dx+1\left\{\begin{matrix} 2ax=2by \\ 2cy=2dx+1 \end{matrix}\right.{2ax=2by2cy=2dx+1​

{2ax+x=2by2cy+y=2dx+1\left\{\begin{matrix} 2ax+x=2by \\ 2cy+y=2dx+1 \end{matrix}\right.{2ax+x=2by2cy+y=2dx+1​

{2ax=2by+y2cy=2dx+x+1\left\{\begin{matrix} 2ax=2by+y \\ 2cy=2dx+x+1 \end{matrix}\right.{2ax=2by+y2cy=2dx+x+1​

{2ax+x=2by+y2cy+y=2dx+x+1\left\{\begin{matrix} 2ax+x=2by+y \\ 2cy+y=2dx+x+1 \end{matrix}\right.{2ax+x=2by+y2cy+y=2dx+x+1​

第一个我们有2(ax−by)=02(ax-by)=02(ax−by)=0且2(cy−dx)=12(cy-dx)=12(cy−dx)=1。因为x,yx,yx,y互质显然(ax−by)(ax-by)(ax−by)和(cy−dx)(cy-dx)(cy−dx)都可以表示成任意整数。所有就有2k=02k=02k=0且2k=12k=12k=1,显然无解。

同理第二个可以推出2k+x=02k+x=02k+x=0且2k+y=12k+y=12k+y=1,就是xxx是偶数,yyy是奇数

第三个推出2k−y=02k-y=02k−y=0且2k−x=12k-x=12k−x=1,就是xxx是奇数,yyy是偶数

第四个是2k+x−y=02k+x-y=02k+x−y=0且2k+y−x=12k+y-x=12k+y−x=1,显然无解

也就是如果x+yx+yx+y是奇数,且gcd(x,y)=1gcd(x,y)=1gcd(x,y)=1那么有p(x,y)=1p(x,y)=1p(x,y)=1,直接可以计算答案,时间复杂度O(n2)O(n^2)O(n2)

定义w(x)w(x)w(x)表示1∼x1\sim x1∼x中与它互质且不是同奇偶的数的个数。若xxx是一个偶数,那么显然没有偶数和它互质那么有w(x)=φ(x)w(x)=\varphi(x)w(x)=φ(x),若xxx是奇数,那么对于每个偶数yyy和它互质也一定有一个对应的奇数x−yx-yx−y和它互质,那么有w(x)=φ(x)2w(x)=\frac{\varphi(x)}{2}w(x)=2φ(x)​。然后求和可以计算答案,时间复杂度O(n)O(n)O(n)

考虑如何用杜教筛优化,我们可以将问题转换为分开求奇数和偶数的φ\varphiφ和,对于每个偶数一定可以被表示为2k(k≤n2)2k(k\leq \frac{n}{2})2k(k≤2n​),那么如何kkk是偶数就有φ(2k)=φ(k)\varphi(2k)=\varphi(k)φ(2k)=φ(k),如果kkk是奇数就有φ(2k)=2∗φ(k)\varphi(2k)=2*\varphi(k)φ(2k)=2∗φ(k),也就是如果求出1∼n21\sim \frac{n}{2}1∼2n​的奇偶的φ\varphiφ和就可以求出偶数的φ\varphiφ和,然后杜教筛减去求出奇数的,这是一个分治的过程,可以通过本题。

时间复杂度O(n23log⁡n)O(n^{\frac{2}{3}}\log n)O(n32​logn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll unsigned long long
using namespace std;
const ll N=1e7+1;
ll T,n,cnt,mu[N],phi[N],pri[N];
ll sp1[N],sp2[N],p1[1100],p2[1100];
bool vis[N];
map<ll,ll> sp,sm;
void prime(){phi[1]=1;for(ll i=2;i<N;i++){if(!vis[i])pri[++cnt]=i,phi[i]=i-1;for(ll j=1;j<=cnt&&pri[j]*i<N;j++){vis[pri[j]*i]=1;if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}phi[i*pri[j]]=phi[pri[j]]*phi[i];}}for(ll i=1;i<N;i++){sp1[i]=sp1[i-1]+phi[i]*(i&1);sp2[i]=sp2[i-1]+phi[i]*(!(i&1));}return;
}
ll GetSphi(ll n){if(n<N)return sp1[n]+sp2[n];if(sp[n])return sp[n];ll rest=(n%2ull==0ull)?((ll)n/2ull*(n+1ull)):((ll)(n+1ull)/2ull*n);for(ll l=2ull,r;l<=n;l=r+1ull)r=n/(n/l),rest-=(r-l+1ull)*GetSphi(n/l);return (sp[n]=rest);
}
void dfs(ll x,ll n){p1[x]=p2[x]=0;if(n<N){p1[x]=sp1[n];p2[x]=sp2[n];return;}dfs(x+1,n/2);p2[x]+=p1[x+1]+p2[x+1]*2ull; p1[x]+=GetSphi(n)-p2[x];return;
}
int main()
{prime();scanf("%llu",&T);while(T--){scanf("%llu",&n);dfs(0,n);printf("%llu\n",p1[0]+p2[0]*2ull-1ull);}
}

P6860-象棋与马【欧拉函数,杜教筛】相关推荐

  1. HDU 6706 huntian oy (欧拉函数 + 杜教筛)

    huntian oy 推式子 ∑i=1n∑j=1igcd(ia−ja,ib−jb)(gcd(i,j)==1)=∑i=1n∑j=1i(i−j)(gcd(i,j)==1)=∑i=1ni∑j=1i(gcd( ...

  2. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.20 莫反 和上午的那道题比较类似的 ...

  3. bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】

    参考:http://blog.csdn.net/wzf_2000/article/details/54630931 有这样一个显然的结论:当\( |\mu(n)|==1 \)时,\( \phi(nk) ...

  4. Euler:欧拉函数&素数筛

    一.欧拉函数 欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示. 通式:   其中p1, p2--pn为x的所有质因数,x是不为0的整数. 比如x=12,拆成质因数为12=2*2*3, ...

  5. 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )

    整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn​)) ②求[1,n]之间每个数的质因数 ...

  6. 【模板题】欧拉函数与线性筛求欧拉函数

    欧拉函数是什么? 定义:对于正整数nnn,欧拉函数是小于或等于nnn的正整数中与nnn互质的数的个数,记作φ(n)\varphi (n)φ(n). φ(1)=1\varphi (1)=1φ(1)=1. ...

  7. Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛

    2749: [HAOI2012]外星人 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 568  Solved: 302 [Submit][Status ...

  8. jzoj1164-求和【欧拉函数,数论】(筛欧拉函数模板)

    正题 大意 给出一个nnn,求1∼n" role="presentation" style="position: relative;">1∼n1 ...

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

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

最新文章

  1. 取文字_取一个好听的女孩名字
  2. 运维的shell小编(1)
  3. BUG管理系统(Mantis)迁移实录
  4. [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
  5. React Suite 做了一个有意思的决定
  6. ClassPathScanningCandidateComponentProvider 扫描给定包及其子包的类
  7. HDU 4069 Squiggly Sudoku
  8. Fedora安装完必做
  9. Web版RSS阅读器(一)——dom4j读取xml(opml)文件
  10. 程序员女朋友都是在哪找的
  11. PCB 板弯了怎么办?pcb板弯翘原因分析及改善方法
  12. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(1)
  13. linux判断文件类型是否存在脚本,shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断...
  14. 【手机下载Linux】
  15. 网络安全入门(黑客)学习路线-2023最新版
  16. 小陈学JS return语句+break,continue,return的区别
  17. 读书笔记-精进 如何成为一个很厉害的人
  18. linux函数怎么判断目录是否存在,linux C之判断文件或目录是否存在 access函数
  19. 无线网卡怎么样?无线网卡怎么安装?
  20. android asynctask异步处理抓取网页,Android处理异步耗时任务,AsyncTask使用教程

热门文章

  1. 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...
  2. 大气校正后的ndvi_大气校正常见错误处理方法及校正后检查
  3. mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求
  4. 46. 全排列015(回溯法求解)
  5. vector的求和用法accumulate
  6. Leetcode周赛复盘——第 276 场力扣周赛
  7. [RabbitMQ]队列持久化
  8. [mybatis]Configuration XML_typeAliases and Alias
  9. 最长公共子序列-dp
  10. 蓝桥杯2016初赛-有奖猜谜-模拟