正题

题目链接:https://www.luogu.com.cn/problem/P4884


题目大意

求一个最小的\(n\)使得\(n\)个连续的\(1\)其在模\(m\)意义下等于\(k\)。

\(6\leq m\leq 10^{11},0<k<m\)


解题思路

补一道老题

\(n\)个连续的\(1\)就是\(\frac{10^n-1}{9}\)所以题目是求

\[\frac{10^n-1}{9}\equiv k(mod\ m)
\]
\[\Rightarrow 10^n\equiv 9k+1(mod\ m)
\]

然后\(\text{BSGS}\)就好了

要开\(\text{\_\_int128}\)


code

#include<cstdio>
#include<cmath>
#include<map>
#include<cctype>
#define ll __int128
using namespace std;
ll read(){
ll x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*f;
}
void print(ll x)
{if(x>9)print(x/10);putchar(48+x%10);return;}
ll k,m,a;
map<ll,ll> hash;
int main()
{
k=read();m=read();k=(k*9+1)%m;
ll q=(ll)sqrt((double)m)+1;
ll val=1;
for(ll j=0;j<q;j++)
{
hash[val*k%m]=j;
val=val*10%m;
}
a=val%m;
if(!a) {
printf("%d",(m==0)?1:-1);
return 0;
}
val=1;
for(ll i=0;i<=q;i++){
ll j=hash.find(val)==hash.end()?-1:hash[val];
if(j>=0&&i*q-j>=0) {
print(i*q-j);
return 0;
}
val=val*a%m;
}
printf("-1");
}

P4884-多少个1?【BSGS】的更多相关文章

  1. 洛谷P4884 多少个1?(BSGS)

    传送门 模数好大……__int128好麻烦……而且BSGS第一次写有点写蒙了…… $11...1(N个1)\equiv k(mod m)$很难算,那么考虑转化一下 先把$11...1(N个1)$写成$ ...

  2. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

  3. 【POJ 3243】Clever Y 拓展BSGS

    调了一周,我真制杖,,, 各种初始化没有设为1,,,我当时到底在想什么??? 拓展BSGS,这是zky学长讲课的课件截屏: 是不是简单易懂.PS:聪哥说“拓展BSGS是偏题,省选不会考,信我没错”,那 ...

  4. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  5. 【BZOJ-3122】随机数生成器 BSGS

    3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1362  Solved: 531[Submit][Sta ...

  6. BSGS[bzoj2242][bzoj3122]

    数论题. 操作一:直接快速幂就好了. 操作二:我用了exgcd,shy和lyz都喜欢欧拉函数...QAQ最后这块还写错了. 对于ax+by=gcd(a,b)的形式,我们可以把他们变成y'x+p'y=1 ...

  7. 【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  8. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

  9. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

随机推荐

  1. 多线程之旅(9)_如何安全的取消正在执行的线程——附C#源码

    参考网址: https://blog.csdn.net/yangwohenmai1/article/details/90404497 当线程能流畅安全的自动运行后,我们就要考虑一些更风骚的操作,就是如 ...

  2. com 组件的本知识

    (今日看到网络上关于"COM中GUID......"文章,写的好,故记录之.)当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Int ...

  3. 十一:JavaWeb中的监听器(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  4. hive表导出到mysql报错

    Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject hadoop@hado ...

  5. mybatis主配置文件详解

    mybatis主配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configur ...

  6. Go版本管理--依赖包存储

    目录 1. 简介 2. GOPATH 依赖包存储 3.GOMODULE 依赖包存储 4.包名大小写敏感问题 1. 简介 GOPATH模式下,依赖包存储在$GOPATH/src,该目录下只保存特定依赖包 ...

  7. Redis(二):基本数据类型

    基础 # redis默认有16个数据库,数组下标从0开始,默认使用0号库 # 当我们启动服务器并连接客户端之后: set <key> <value> # 向数据库中添加数据用于 ...

  8. Promise.resolve( data)与Promise.reject( data )

    Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...

  9. SpringBoot应用中使用AOP记录接口访问日志

    SpringBoot应用中使用AOP记录接口访问日志 本文主要讲述AOP在mall项目中的应用,通过在controller层建一个切面来实现接口访问的统一日志记录. AOP AOP为Aspect Or ...

  10. bat 使用ftp进行文件上传

    实例 @echo off rem 打开远程ftp echo open 172.16.137.23 > ftpconfig.txt rem 使用匿名用户登录 echo user anonymuou ...