luogu P4884 多少个1?
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?的更多相关文章
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [luogu P2170] 选学霸(并查集+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- Luogu 考前模拟Round. 1
A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
- CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)
CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...
- Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)
Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...
- Luogu 1962 斐波那契数列(矩阵,递推)
Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...
随机推荐
- 移动端1px像素解决方式,从1px像素问题剖析像素及viewport
在移动端web开发过程中,如果你对边框设置border:1px,会发现,边框在某些手机机型上面显示的1px比实际感觉会变粗,这也就是1像素问题.如下图是对桌面浏览器和移动端border设置1px的比较 ...
- 12.Clear Flags属性与天空盒
选中Hierarchy面板的摄像机,然后在右侧Inspector面板的Clear Flags属性可以找到有如下选项, SkyBox:天空盒(默认效果,让场景看着有一个天空) Solid Color:固 ...
- C#使用NPOI对Word文档进行导出操作的dll最新版2.5.1
Npoi导出非模板 最近使用NPOI做了个导出Word文档的功能,因为之前都是导出Excel很方便(不用模板),所以导出Word也选用了Npoi(也没有用模板,
- STM32H743 | FDCAN 波特率问题
直奔主题,最近项目上接触了FDCAN,主控为STM32H743.在开发过程中存在了几点疑惑,特此记录. 波特率设置问题 CAN通讯的波特率计算方式为: BaudRate = Tq *(SYNC_SEG ...
- # scrapy(二):get请求
scrapy中的get请求及基本使用: 1. 创建scrapy项目 scrapy startproject QiuBaiProject 2. 创建爬虫文件 scrapy genspider QiuBa ...
- scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器
Scheduler调度器 对ExecutionEngine执行引擎篇出现的Scheduler进行展开.Scheduler用于控制Request对象的存储和获取,并提供了过滤重复Request的功能. ...
- How to use the functions of apply and call
Although apply and call can implement same function. However, there is a litter different between ...
- 01-MySQL支持的数据类型
1.数值类型 整数类型 MySQL 支持的整数类型有 SQL 标准中的整数类型 INTEGER,SMALLINT,TINYINT.MEDIUMINT和BIGINT.其整数类型的特性如下表所示: 在上述 ...
- MVC + EFCore 项目实战 - 数仓管理系统5 – 菜单配置及里程碑划分
上次课程我们完成了需求的梳理. 我们根据梳理的需求把菜单配好,另外我们把项目里程碑也配置在系统中,开发和管理都在系统中,形成无文档化管理. 一.菜单配置 根据我们的归纳图,我们先将菜单配置好. 我们遵 ...
- 当输入一个 URL,实际会发生什么?
从一个经典的面试题说起 从输入URL到页面展现的过程: 输入URL后,会先进行域名解析.优先查找本地host文件有无对应的IP地址,没有的话去本地DNS服务器查找,还不行的话,本地DNS服务器会去找根 ...