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;
}

最新文章

  1. 【LeetCode OJ】Construct Binary Tree from Preorder and Inorder Traversal
  2. 表单的enctype property
  3. 交换机的端口状态是UP,但是查询该端口下的MAC地址为空
  4. hibernate数据库连接池
  5. 关闭Outlook时最小化 dll
  6. excel表中内容如何反排列
  7. Go append方法
  8. 如何Angularjs1.3在页面中输出带Html标记的文本
  9. android134 360 07 归属地查询
  10. 学习PYTHON第一天
  11. 【Java】WEB-INF目录与META-INF目录的作用
  12. python之路-模块 WebDriver API
  13. ortoiseSVN无法编辑日志信息的解决方法
  14. Spark实践的阶段性总结
  15. 解决LINUX vncserver 启动 could not open default font &amp;#39;fixed&amp;#39;错.
  16. android studio 的自动更新问题
  17. 移除 iview的Input组件默认background效果
  18. artTemplate的使用案列
  19. react学习笔记(二)
  20. [转]What are mode and status columns under gp_segment_configuration table

热门文章

  1. innobackupex 数据库备份
  2. kibana限制用户只具备读图的权限
  3. MVC引用asp.net报表(测试小例子)
  4. scala 数据结构(三):元组Tuple
  5. java 面向对象(三十二):泛型一 泛型的理解
  6. java 面向对象(八):面向对象的特征一:封装性
  7. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
  8. UML学习笔记—基本概念和初始阶段
  9. CentOS7 源码编译安装Nginx
  10. python和java哪个更值得学?Python会超越Java吗?