LINK:多少个1?

题目要求:\(\sum_{i=0}^{n-1}10^i \equiv k \mod m\) 最小的n。

看起来很难求的样子 这个同余式 看起来只能暴力枚举。

不过既然是同余 我们等式两边就可以同时进行加减乘 运算。

考虑转换成我们熟悉的模型 而这个形式比较像高次同余方程。

等式两边同乘 9 再加一 等式变成 \(10^n\equiv 9*k+1\mod m\)

显然这是一个高次同余方程我们直接BSGS即可。

但是m和10显然有可能是不互质的 所以我们需要一个扩展BSGS (扩展拔山盖世算法。

哦 m保证为质数 那打扰了。。

但是 模数有可能m>int 所以我们需要龟速乘 这样的话复杂度就是log^2的了 且log是跑满的。所以非常的慢。

const ll MAXN=100010;
ll mod,n;
map<ll,ll>H;
inline ll gsc(ll a,ll b)
{
ll cnt=0;
while(b)
{
if(b&1)cnt=(cnt+a)%mod;
b=b>>1;a=(a+a)%mod;
}
return cnt;
}
inline ll BSGS()//求 10^x%mod=n; x>1
{
ll w=(ll)sqrt(mod*1.0)+1;
ll ww=1;
rep(1,w,i)
{
ww=ww*10%mod;
ll cc=gsc(ww,n)%mod;
H[cc]=max(H[cc],i);
}
ll cc=ww;
rep(1,w,i)
{
if(H.find(cc)!=H.end())return i*w-H[cc];
if(cc==n)return i*w;
cc=gsc(cc,ww)%mod;
}
return 114514;
}
int main()
{
freopen("1.in","r",stdin);
get(n);get(mod);
n=n*9+1%mod;
putl(BSGS());
return 0;
}

其实完全不需要快速幂 我们颠倒一下 两部分先求出右部分即可。

当然 也可以快速幂了 那个时候不过不能再龟速乘了。

考虑一种较快的乘法:

比较常见的 是转long double 的快速乘。

long double精度不够的时候 会丢弃后面的位。

考虑 a%p=a-(a/p)p; 那么 ab%p=ab-(ab/p)*p;

如果p过大的时候 我们会丢掉 a*b后面的一些位 但是这些位同时也产生不了贡献

所以 这样做是可行的。具体的 我再思考一下。

inline LL ksc(LL a,LL b,LL p)//long double版本的快速乘
{
a%=p;b%=p;
long long c=(long double)a*b/p;
long long ans=a*b-c*p;
if(ans<0) ans+=p;
else if(ans>=p) ans-=p;
return ans;
}

luogu P4884 多少个1?的更多相关文章

  1. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  2. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  3. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  4. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  5. Luogu 考前模拟Round. 1

    A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...

  6. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  7. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

  8. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

  9. Luogu 1962 斐波那契数列(矩阵,递推)

    Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...

随机推荐

  1. python入门006

    一:可变与不可变类型 可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的 不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的 2.验证 2.1 ...

  2. python入门007

    一.深浅copy 浅拷贝:是把原列表第一层的内存地址完全拷贝一份给新列表.即只能保证对原列表中第一层地址(不可变类型)的改操作不受影响,涉及到原列表中第二层地址(可变类型)的改操作时,原列表变,新列表 ...

  3. 【asp.net core 系列】15 自定义Identity

    0. 前言 在之前的文章中简单介绍了一下asp.net core中的Identity,这篇文章将继续针对Identity进行进一步的展开. 1. 给Identity添加额外的信息 在<[asp. ...

  4. cookie与token

    cookie: 登陆后后端生成一个sessionid放在cookie中返回给客户端,并且服务端一直记录着这个sessionid,客户端以后每次请求都会带上这个sessionid, 服务端通过这个ses ...

  5. 【笔记】Java语法

    Java语法 兜兜转转,又绕回到Java了. 最近在学习Java,其实以前也学过,但是技术发展太快了,Java都出到14了..是时候该更新一下知识体系了. 然后看的是网上好评如潮的<Java核心 ...

  6. 爬虫页面解析 lxml 简单教程

    一.与字符串的相互转换 1.字符串转变为etree 对象 import lxml.html tree = lxml.html.fromstring(content) # content 字符串对象 2 ...

  7. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数

    Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...

  8. Windows故障转移群集(WSFC)的备份和恢复

    使用wbadmin进行备份和恢复将C盘数据备份到E盘查看备份的版本以及包含的items模拟群集角色被误删除进行恢复操作检查恢复的效果 WSFC群集的备份和恢复功能是使用Windows Server B ...

  9. 小白从零开始阿里云部署react项目+node服务接口(二:node服务+web)

    我们用极简的方式来创建服务,没有任何附加功能 1 新建一个server文件夹 2 使用npm init 或者yarn init  一路enter 3  yarn add  express cors  ...

  10. 紧急处理RAC环境有一个监听down 的情况

    初步处理 1. grid 登录查看是监听是否down掉 srvctl status listener -n node1 或者oracle登录 lsnrctl status 查看 如果掉了 grid 用 ...