题目连接:

  传送

题解:

  真是一道好题……

一:

  一个分数$\frac{x}{y}$完全循环当其第一次出现时,当且仅当y与k互质,x与y互质,且y不等于1。

  整数情况下y一定为1,即也满足以上判断。

  推导:

    方法一:打表找规律= =

    方法二:x与y互质去重= =,设循环次数为l,则对于循环节第一次循环前剩余$x\mod y$,第二次循环前剩余$xk^l\mod y$,若其为循环则满足:,由x与y互质可知存在x对y的逆元,所以:

        

由贝祖定理可知,k与y互质。

二、反演:

          

  考虑d前面时间复杂度为$O(\sqrt{k}\ln k)$,后边分块时间复杂度$O(\sqrt n)$

  考虑如何得到$S(n,sg)=\sum_{i=1}^n \mu(isg)$。

  1.当$\mu(sg)==0$时,上式为0;

  2.设p为sg质因数,则有$S(n,sg)=\sum_{i=1}^n\mu(i)([p|i]-1)$,故$S(n,sg)=S(n/p,sg)-S(n,sg/p)$。

  故求一次$S(n,sg)$的时间复杂度约为$(O(2^{k的质因子个数}))$。

三、时间复杂度

  $O(\sqrt{nk}\ln k)$  

代码:

 #include "bits/stdc++.h"

 using namespace std;

 const int N=2e7+;

 int prim[N],num,miu[N],pre[N];
bool vis[N]; inline void init(){
miu[]=;
pre[]=;
register int i,j;
for( i=;i<N;++i){
if(!vis[i])
prim[++num]=i,miu[i]=-;
for( j=;prim[j]*i<N;++j){
vis[i*prim[j]]=true;
if(i%prim[j]) {
miu[i*prim[j]]=-miu[i];
}else{
miu[i*prim[j]]=;break;
}
}
pre[i]+=pre[i-]+miu[i];
}
} int n,m,k,wr[N],cnt;
int fac[][];
vector<int> factor[]; map<int,int> ss; inline int Get_miu(int x){
if(x<N) return pre[x];
if(ss.count(x)) return ss[x];
int ans=;
for(int i=,pos;i<=x;i=pos+){
pos=x/(x/i);
ans-=Get_miu(x/i)*(pos-i+);
}
return ss[x]=ans;
} inline int get_miu(int x,int sg){
if(sg==)return Get_miu(x);
if(x<=) return fac[sg][x];
else {
int p=wr[sg];
return get_miu(x/p,sg)-get_miu(x,sg/p);
}
} int main(){
// freopen("1.out","r",stdin);
// freopen("b1.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
init();
for(int i=;i<=k;++i)
for(int j=;j<=i;++j)
if(i%j==) factor[i].push_back(j); for(int i=;i<=;++i)
for(int j=;prim[j]<=i;++j) if(i%prim[j]==) wr[i]=prim[j];
for(int i=;i<=;++i)
if(k%i==)
for(int j=;j<=;++j)
fac[i][j]=fac[i][j-]+miu[j*i]; long long ans=,sum;
register int d,pos;
int last,now,nn,mm,t1,t2,t,g,s,p,q;
for(int i=;i<factor[k].size();++i){
t=factor[k][i];
sum=;
for( p=;p<factor[t].size();++p){
g=factor[t][p];
for( q=,s;q<factor[t/g].size();++q){
s=factor[t/g][q];
t1=s*g,t2=s*t;
nn=n/t1,mm=m/t2;
last=,now;
if(miu[s*g]==) continue;
for(d=,pos;d<=min(nn,mm);d=pos+){
pos=min(nn/(nn/d),mm/(mm/d));
now=get_miu(pos,s*g);
sum+=(now-last)*1ll*(nn/d)*(mm/d)*miu[s];
last=now;
}
}
}
ans+=sum*miu[t];
}
printf("%lld\n",ans);
}

【BZOJ 4652】【NOI 2016】循环之美的更多相关文章

  1. [NOI 2016]循环之美

    Description 题库链接 给出十进制下的 \(n,m,k\) ,求 \(\frac{i}{j},i\in[1,n],j\in[1,m]\) 在 \(k\) 进制下不同的纯循环小数个数. 纯循环 ...

  2. NOI 2016 循环之美 (莫比乌斯反演+杜教筛)

    题目大意:略 洛谷传送门 鉴于洛谷最近总崩,附上良心LOJ链接 任何形容词也不够赞美这一道神题 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[gcd(i,j) ...

  3. [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分

    [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(| ...

  4. [bzoj 4650][NOI 2016]优秀的拆分

    传送门 Description 如果一个字符串可以被拆分为\(AABB\) 的形式,其中$ A$和 \(B\)是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串\(aabaaba ...

  5. UOJ #221 【NOI2016】 循环之美

    题目链接:循环之美 这道题感觉非常优美--能有一个这么优美的题面和较高的思维难度真的不容易-- 为了表示方便,让我先讲一下两个符号.\([a]\)表示如果\(a\)为真,那么返回\(1\),否则返回\ ...

  6. 【BZOJ4652】【NOI2016】循环之美(莫比乌斯反演,杜教筛)

    [BZOJ4652]循环之美(莫比乌斯反演,杜教筛) 题解 到底在求什么呢... 首先不管他\(K\)进制的问题啦,真是烦死啦 所以,相当于有一个分数\(\frac{i}{j}\) 因为值要不相等 所 ...

  7. LibreOJ2085 - 「NOI2016」循环之美

    Portal Description 给出\(n,m(n,m\leq10^9)\)和\(k(k\leq2000)\),求在\(k\)进制下,有多少个数值不同的纯循环小数可以表示成\(\dfrac{x} ...

  8. [UOJ#221][BZOJ4652][Noi2016]循环之美

    [UOJ#221][BZOJ4652][Noi2016]循环之美 试题描述 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部 ...

  9. [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机

    [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...

  10. [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会

    [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会 题意 给定一个长度为 \(n\) 的字符串 \(s\), 对于所有 \(r\in[1,n]\) 求出 \(s\ ...

随机推荐

  1. 《HelloGitHub》第 25 期

    <HelloGitHub>第 25 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...

  2. 【redis】Java连接云服务器redis之JedisConnectionException的异常问题

    代码很简单: public static void main(String[] args) { Jedis jedis = new Jedis("116.85.10.216",63 ...

  3. 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0

    问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...

  4. 移动端调试技巧(禁止webviuew,inspect等)

    如果由于某种原因(天朝FQ),不能支持google 的 inspect  调试 或者再想在某个APP里面调试你的页面,但是没有打开APP的webview ,也不能授权调试 在或者,Fider 可以拦截 ...

  5. springMVC 中的restful 架构风格

    RESTful架构 : 是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. ...

  6. 导出excel 的方法及示例

    一.基本知识 1.Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 2. HSSF 是Horribl ...

  7. vfd折腾(二)

    这篇是前期程序部分,主要讲驱动pt6311的程序 电路见上一篇博文 #ifndef PT6311_H #define PT6311_H #include "sys.h" #incl ...

  8. MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述

    本文目录: 1.安装xtrabackup 2.备份锁 3.xtrabackup备份原理说明 3.1 备份过程(backup阶段) 3.2 准备过程(preparing阶段) 3.3 恢复过程(copy ...

  9. css初始化标签属性--源码

    body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote ...

  10. JS 小技巧整理

    一.javascript中调用函数并不一定严格执行指定的参数个数.(函数定义时的参数个数和调时指定的参数个数并不一定要相等) function showInfo(arg1) { var defindl ...