Luogu P10496 The Luckiest Number 题解
UPD:被叉了,原因是快速幂可能模数很大会爆 long long,改成 __int128 就好了。
考虑用一种比较方便表达的方式表示全是 \(8\) 的数字。我们发现,长度为 \(x\) 的全是 \(8\) 的数字可以表示为 \(\frac{10^x-1}{9}\times 8\)。
根据题目要求,这个数字是 \(L\) 的倍数,所以有下面式子:
\]
两边同时乘以 \(9\) 得到:
\]
这个式子可以继续化简,考虑到 \(\gcd(L,8)\) 一定整除 \(8(10^x-1)\),我们考虑在左边除以 \(\gcd(L,8)\),右边消去常数 \(8\):
\]
由于没有什么关于这种式子的算法,所以我们改变式子的形式,把它变成同余式:
\]
移项得:
\]
转化为了高次不定方程,直接使用 exBSGS 解决。注意这题需要求出的是最小正整数解,所以 exBSGS 返回的答案必须大于 \(0\)。
#include <bits/stdc++.h>
using namespace std;
long long t,a,p,x,y,now=0;
map<long long,long long>h;
long long gcd(long long a,long long b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
long long exgcd(long long a,long long b,long long &x,long long &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
long long r=exgcd(b,a%b,x,y),d=x;
x=y,y=d-a/b*y;
return r;
}
long long power(long long a,long long p,long long mod)
{
long long ans=1,x=a;
while(p)
{
if(p&1)ans=(__int128)ans*x%mod;
p>>=1;
x=(__int128)x*x%mod;
}
return ans;
}
long long bsgs(long long a,long long b,long long mod)
{
h.clear();
long long t=sqrt(mod)+1,now=1,inc=power(a,t,mod);
if(a==0)
{
if(b==0)return 1;
else return -1;
}
for(int i=0;i<=t-1;i++)h[(__int128)now*b%mod]=i+1,now=(__int128)now*a%mod;
now=1;
for(int i=1;i<=t;i++)
{
now=(__int128)now*inc%mod;
if(h.count(now)>0&&((__int128)i*t-h[now]+1))return (__int128)i*t-h[now]+1;
}
return -1;
}
long long exbsgs(long long a,long long b)
{
long long d=gcd(a,p),cnt=0,sum=1,ans=0;
a%=p,b%=p;
if(a==0)
{
if(b==0)return 1;
else return -1;
}
while(d!=1)
{
if(b%d!=0)return -1;
cnt++,p/=d,sum=(__int128)sum*(a/d)%p,b/=d;
d=gcd(a,p);
if(sum==b&&cnt!=0)return cnt;
}
exgcd(sum%p,p,x,y);
x=(x%p+p)%p;
ans=bsgs(a,(__int128)x*b%p,p);
if(ans==-1)return -1;
else return ans+cnt;
}
int main()
{
while(1)
{
scanf("%lld",&a);
if(a==0)break;
p=9*a/gcd(a,8),now++;
long long ans=exbsgs(10,1);
if(ans==-1)printf("Case %lld: 0\n",now);
else printf("Case %lld: %lld\n",now,ans);
}
return 0;
}
Luogu P10496 The Luckiest Number 题解的更多相关文章
- poj 3696 The Luckiest Number
The Luckiest Number 题目大意:给你一个int范围内的正整数n,求这样的最小的x,使得:连续的x个8可以被n整除. 注释:如果无解输出0.poj多组数据,第i组数据前面加上Case ...
- C#版 - Leetcode 414. Third Maximum Number题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- luogu P1126 机器人搬重物 题解
luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...
- POJ3696 The Luckiest number
题意 Language:Default The Luckiest number Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7 ...
- POJ_3696 The Luckiest number 【欧拉定理+同余式+对取模的理解】
一.题目 Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his ...
- poj_3696_The Luckiest number
Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...
- POJ3696:The Luckiest number(欧拉函数||求某数最小的满足题意的因子)
Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...
- HDU 2462 The Luckiest number
The Luckiest number Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Ori ...
- The Luckiest number(hdu2462)
The Luckiest number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- [题解](同余)POJ_3696_The Luckiest Number
还是挺难的吧......勉强看懂调了半天 首先表达式可以写成 8(10^x -1)/9,题意为求一个最小的x使L | 8(10^x -1)/9 设d=gcd(L,8) L | 8(10^x -1)/9 ...
随机推荐
- springmvc实现转发和重定向
一. @RequestMapping("/testVoid") public String testVoid(HttpServletRequest request){ //转发方式 ...
- MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题 问题背景 在停服发版更新时,需对 200GB 大表(约 200 亿行数据)进行快速备份以预防操作失误. 因为曾经出现过有开发写的发 ...
- infiniswap用到的技术
infiniswap来自 NSDI'17,其代码主要用到以下技术: configfs(主要) configfs-用户空间控制的内核对象配置 https://www.kernel.org/doc/Doc ...
- blk_mq多队列块设备浅析
1. 为什么要使用多队列 在主机中,多cpu运行多个线程,每个线程都能和文件系统交互,文件系统层也是用多线程和bio层交互,但是,块设备层只有一个队列: 在块设备层,来自多个cpu的bio请求被放在同 ...
- <HarmonyOS第一课02>DevEco Studio的使用
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717494752698457?ha_sou ...
- 【经验】Word 2021|Word文档间复制粘贴保留源格式后,行间距却发生变化(文档网格)
版本:Word 2021 这个问题通常是因为文档中设置了网格,段落中设置了按照网格对齐. 下面记录网格的相关设置. 打开设置界面 布局-页边距-自定义页边距. 影响网格布局的所有因素 如果想将两篇文档 ...
- netcore限流
netcore限流 using System; using System.Collections.Generic; using System.Threading.Tasks; using Micros ...
- k8s资源清单创建pod
资源:对象 service pod deployment workload:pod,ReplicaSet,Deployment,statefulset,DaemonSet,Job,Crontabjob ...
- 2003 can't connect to mysql server on
把配置文件my.ini换成如下所示: mysql和mysql数据存放路径都是加双斜线 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mys ...
- Friend Circles(dfs)——LeetCode进阶路
原题链接https://leetcode.com/problems/friend-circles/ 题目描述 There are N students in a class. Some of them ...