正题

题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1675


题目大意

给出两个长度为\(n\)的序列\(a,b\),求有多少对\(x,y\)满足

\[gcd(x,y)=1且a_{b_x}=b_{a_y}
\]

\(1\leq n\leq 10^5,1\leq a_i,b_i\leq n\)


解题思路

额挺明显的一个莫反,枚举约数\(d\)的时候用一个数组统计一下有多少个\(a_{b_x}\)就好了。

时间复杂度\(O(n\log n)\)


code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define ll long long
  5. using namespace std;
  6. const ll N=1e5+10;
  7. ll n,cnt,ans,a[N],b[N],c[N],mu[N],pri[N/10];
  8. bool v[N];
  9. void Prime(){
  10. mu[1]=1;
  11. for(ll i=2;i<=n;i++){
  12. if(!v[i])pri[++cnt]=i,mu[i]=-1;
  13. for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
  14. v[i*pri[j]]=1;
  15. if(i%pri[j]==0)break;
  16. mu[i*pri[j]]=-mu[i];
  17. }
  18. }
  19. return;
  20. }
  21. signed main()
  22. {
  23. scanf("%lld",&n);
  24. for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
  25. for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);
  26. Prime();
  27. for(ll i=1;i<=n;i++){
  28. ll sum=0;
  29. for(ll j=i;j<=n;j+=i)c[a[b[j]]]++;
  30. for(ll j=i;j<=n;j+=i)sum+=c[b[a[j]]];
  31. for(ll j=i;j<=n;j+=i)c[a[b[j]]]--;
  32. ans+=sum*mu[i];
  33. }
  34. printf("%lld\n",ans);
  35. return 0;
  36. }

51nod1675-序列变换【莫比乌斯反演】的更多相关文章

  1. 51Nod1675 序列变换 数论 莫比乌斯反演

    原文http://www.cnblogs.com/zhouzhendong/p/8665675.html 题目传送门 - 51Nod1675 题意 给定序列$a,b$,让你求满足$\gcd(x,y)= ...

  2. BZOJ 4036: [HAOI2015]按位或 集合幂函数 莫比乌斯变换 莫比乌斯反演

    http://www.lydsy.com/JudgeOnline/problem.php?id=4036 http://blog.csdn.net/lych_cys/article/details/5 ...

  3. 7.12 NOI模拟赛 积性函数求和 数论基础变换 莫比乌斯反演

    神题! 一眼powerful number 复习了一下+推半天. 可以发现G函数只能为\(\sum_{d}[d|x]d\) 不断的推 可以发现最后需要求很多块G函数的前缀和 发现只有\(\sqrt(n ...

  4. 51nod1675 序列变换

    link 题意: 给定长为n的序列a,b,下标从1开始,问有多少对x,y满足gcd(x,y)=1且$a_{b_x}=b_{a_y}$? $n\leq 10^5.$ 题解: $a_{b_x}$和$b_{ ...

  5. 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]

    序列变换 alpq654321 (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...

  6. codeforces#1139D. Steps to One (概率dp+莫比乌斯反演)

    题目链接: http://codeforces.com/contest/1139/problem/D 题意: 在$1$到$m$中选择一个数,加入到一个初始为空的序列中,当序列的$gcd$和为$1$时, ...

  7. 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 241  Solved: 119[Submit][Status][Discu ...

  8. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  9. BZOJ 1114 Number theory(莫比乌斯反演+预处理)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738 题意:给你一个整数序列a1, a2, a3, ... , ...

  10. 【莫比乌斯反演】BZOJ1101 [POI2007]zap

    Description 回答T组询问,有多少组gcd(x,y)=d,x<=a, y<=b.T, a, b<=4e5. Solution 显然对于gcd=d的,应该把a/d b/d,然 ...

随机推荐

  1. flutter中显现登录页面成功后跳转的方法

    最近在实现页面输入账号跟密码之后跳转到初始页面,一开始用 Navigator.of(context).push(new MaterialPageRoute(builder: () { return n ...

  2. SQL Server中的group by(分组)

    参考网址: https://blog.csdn.net/tswc_byy/article/details/81909052 sql 查询不必需和聚合函数一起使用 ,通常来说一般是要和聚合函数一起使用来 ...

  3. malloc 和new , free 和delete的区别

    #include <iostream>using namespace std;class user{ public: int age; int number; void test() { ...

  4. YARN的工作过程

    yarn的工作执行流程图 1.用户向YARN中提交应用程序 2.ResourceManager为该应用程序找到一个可用的NodeManager 并分配一个Container,然后在这个Containe ...

  5. Go与接口:接口即约定

    接口 接口类型是对其他类型行为的概括与抽象.我们可以通过接口来约定某一类通用行为.Go语言的接口是隐式的:只要实现接口A的所有方法就代表实现了接口A. 接口即约定 接口是什么样的? package i ...

  6. rabbitMq接收实体

  7. 浅谈C#更改令牌ChangeToken

    前言 在上篇文章浅谈C#取消令牌CancellationTokenSource一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回 ...

  8. DNSPod DDNS 动态域名设置

    所谓动态域名,就是当你的服务器 IP 地址发生变化的时候,自动地修改你在「域名解析服务商」那里的域名记录值 怎么操作?看官方文档 DNSPod用户API文档 首先需要创建 Token 完整的 API ...

  9. 简单C++线程池

    简单C++线程池 Java 中有一个很方便的 ThreadPoolExecutor,可以用做线程池.想找一下 C++ 的类似设施,尤其是能方便理解底层原理可上手的.网上找到的 demo,基本都是介绍的 ...

  10. Python__bs4模块

    1 - 导入模块 from bs4 import BeautifulSoup 2 - 创建对象 fp = open('./test.html','r',encoding='utf-8') soup = ...