bzoj 4652: [Noi2016]循环之美
额,,网上一堆题解,,随便一找就找到笨蒟蒻扒的了。
这个比较神奇的是纯循环小数就是[(y,k)=1],题解有证明这个的,貌似就是k进制下的类似循环节,不会不会。。
然后这道题就变成了求这个东西:∑(x<=n)∑(y<=m) [(x,y)=1][(y,k)=1]
显然要反演一下, 出来这个东西∑(d<=n)[(d,k)==1] μ(d) (n/d) ∑ (j<=m/d) [(j,k)==1]
然后k固定,所以搞一个∑(d<=n)[(d,k)==1] μ(d)和 ∑ (j<=m/d) [(j,k)==1],这两部分有神奇的递推式,然后各种各种,,不会不会。。。
(公式怎么打啊。。。)
这位神犇写的很详细 %%%% http://www.cnblogs.com/lcf-2000/p/6250330.html
#include<bits/stdc++.h>
#define LL long long
using namespace std; const int maxn=;
const int mod=;
const int maxk=; int n,m,k,prime_k[maxk],cnt;
int prime[maxn],f[maxk];
int head[mod],next[maxn],to[maxn],tt;
int h1[][mod],n1[maxn],t1[maxn],t2;
bool vis[maxn],huzhi[maxk];
LL ans,zto[maxn],zt1[maxn],mo[maxn]; void mobius()
{
mo[]=;
for (int i=; i<maxn; i++)
{
if (!vis[i]) prime[++prime[]]=i,mo[i]=-;
for (int j=; j<=prime[] && i*prime[j]<maxn; j++)
{
vis[i*prime[j]]=;
if (i%prime[j]==)
{
mo[i*prime[j]]=;
break;
}
mo[i*prime[j]]=-mo[i];
}
}
for (int i=; i<maxn; i++) mo[i]+=mo[i-];
for (int i=; i<=k; i++) f[i]=f[i-]+(__gcd(i,k)==);
} LL F(int x){return (x/k)*f[k]+f[x%k];} LL solve_mo(int x)
{
if (x<maxn) return mo[x];
for (int i=head[x%mod];i;i=next[i]) if (to[i]==x) return zto[i];
int now=++tt; to[tt]=x; next[tt]=head[x%mod]; head[x%mod]=tt; zto[now]=;
for (int i=,nt=; nt<x; i=nt+) nt=x/(x/i),zto[now]-=(nt-i+)*solve_mo(x/i);
return zto[now];
}
LL G(int x, int y)
{
if (!x) return solve_mo(y);
if (y<=) return y;
for (int i=h1[x][y%mod];i;i=n1[i]) if (t1[i]==y) return zt1[i];
int now=++t2; t1[t2]=y; n1[t2]=h1[x][y%mod]; h1[x][y%mod]=t2;
return zt1[now]=G(x-,y)+G(x,y/prime_k[x]);
}
int main()
{
scanf("%d%d%d",&n,&m,&k); mobius();
for (int i=; prime[i]<=k; i++) if (k%prime[i]==) prime_k[++cnt]=prime[i];
for (int d=,l=min(n,m),pos; d<=l; d=pos+)
{
pos=min(n/(n/d),m/(m/d));// cout<<"!";
ans+=(G(cnt,pos)-G(cnt,d-))*(LL)(n/d)*F(m/d);
}
printf("%lld\n",ans);
return ;
}
小技巧:这里的记忆化搜索用链表代替了map(会不会map也是差不多的实现原理啊2333)
bzoj 4652: [Noi2016]循环之美的更多相关文章
- [UOJ#221][BZOJ4652][Noi2016]循环之美
[UOJ#221][BZOJ4652][Noi2016]循环之美 试题描述 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部 ...
- luogu 1587 [NOI2016]循环之美
LINK:NOI2016循环之美 这道题是 给出n m k 求出\(1\leq i\leq n,1\leq j\leq m\) \(\frac{i}{j}\)在k进制下是一个纯循环的. 由于数值相同的 ...
- bzoj4652 [Noi2016]循环之美
Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在k进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对于已知 ...
- [NOI2016]循环之美
Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对 ...
- BZOJ4652 [Noi2016]循环之美 【数论 + 莫比乌斯反演 + 杜教筛】
题目链接 BZOJ 题解 orz 此题太优美了 我们令\(\frac{x}{y}\)为最简分数,则\(x \perp y\)即,\(gcd(x,y) = 1\) 先不管\(k\)进制,我们知道\(10 ...
- BZOJ4652: [Noi2016]循环之美(莫比乌斯反演,杜教筛)
Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对 ...
- luogu P1587 [NOI2016]循环之美
传送门 首先要知道什么样的数才是"纯循环数".打表可以发现,这样的数当且仅当分母和\(k\)互质,这是因为,首先考虑除法过程,每次先给当前余数\(*k\),然后对分母做带余除法,那 ...
- 题解 P1587 【[NOI2016]循环之美】
知识点:莫比乌斯反演 积性函数 杜教筛 废话前言: 我是古明地恋,写这篇题解的人已经被我 请各位读者自行无视搞事的恋恋带有删除线的内容,谢谢茄子. 这道题目本身并不难,但是公式推导/代码过程中具有迷惑 ...
- BZOJ4652 NOI2016循环之美(莫比乌斯反演+杜教筛)
因为要求数值不同,不妨设gcd(x,y)=1.由提示可以知道,x/y是纯循环小数的充要条件是x·klen=x(mod y).因为x和y互质,两边同除x,得klen=1(mod y).那么当且仅当k和y ...
随机推荐
- oracle 高级函数2
原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...
- 【代码总结】GD库中图片缩印
bool imagecopyresampled ( resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src ...
- 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递
JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. ...
- Redis实战(20)Redis 如何从海量数据中查询出某一个 Key?
序言 资料 https://www.cnblogs.com/vipstone/p/12373734.html
- 物联网协议CoAP协议学习
CoAP:Constrained Application Protocol协议是为物联网中资源受限的设备制定的应用层协议,即简化版的基于UDP的HTTP协议.其核心内容为资源抽象.REST式交互可扩展 ...
- 常见Linux发行版有哪些?
Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...
- SCP 上传
https://www.runoob.com/linux/linux-comm-scp.html scp 当前路径(绝对路径) root@xx.xx.xx :/xx/xx/xx/
- C#中as用法---转载
转载 jiang13824690 发布于2018-07-24 11:19:00 阅读数 3302 收藏 展开 在程序中,进行类型转换时常见的事,C#支持基本的强制类型转换方法,例如 Object o ...
- layer 点击yes后在回调函数里获取layer.open({})iframe里面元素
参考:http://fly.layui.com/jie/19690/ yes: function(index, layero) { uid.value = $(layero).find('iframe ...
- 如何安装第三方模块#Python
从书上看到用pip install XXX 就可以直接安装模块.下面就是具体操作 1.添加环境变量D:\Python\Scripts\pip.exe 2.打开cmd切换到python安装目录 3.pi ...