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 ...
随机推荐
- php基础 php 全局变量
$_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和post两种方式的值 $GLOBALS ---- ...
- 设计模式01 创建型模式 - 原型模式(Protype Pattern)
参考 1. 设计模式:原型模式 | 博客园 2. Java clone深拷贝.浅拷贝 | CSDN 3. Cloneable接口和Object的clone()方法 | 博客园 原型模式(Prototy ...
- 为PHP开发搭建环境
为了能在自己的电脑上(mac OS系统)开始编写PHP代码并完成运行,需要有: 1.安装Web服务器 2.安装PHP 3.安装数据库,比如MySQL 4.一个PHP的IDE 为了上面所提到的1~3步的 ...
- Vue——解决报错 Computed property "****" was assigned to but it has no setter.
在最近的项目中遇到了如下的警告信息: [Vue warn]: Computed property " currentStep" was assigned to but it has ...
- Struts2学习(四)
struts-defualt.xml指定的result的类型 1.struts-defualt.xml 文件的 181 行 开始定义了: <result-types> <result ...
- 华为事件对A股的影响思考
美国对华为实施禁商令: 利好:自主可控-替代品 软件:国产操作系统(中国软件,浪潮软件,湘邮科技...) 芯片:国产芯片(士微兰,国民技术...) 利好:华为优势产品 5G: 利好:反制资源 稀土永磁 ...
- 让eclipse恢复默认布局
参考:https://blog.csdn.net/howlaa/article/details/39178359 Window -> Perspective -> Reset Perspe ...
- 关于JDK+Tomcat+eclipse+MyEclipse的配置方法
说一下关于JDK+Tomcat +eclipse+MyEclipse的配置方法: 1.jdk的配置 我用的是jdk1.6版本,与jdk1.5方法相同.执行完安装程序后就要在进行一下配置,步骤如下:右键 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用按钮
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jmeter分布式linux负载机,windows主控机
1.将参数化文件上传到linux服务器,放在linux上jmeter的bin路径下 2.设置server.rmi.ssl.disable=true 分别修改主控机和负载机的jmeter.propert ...