Acwing202. 最幸运的数字

题意:

现在给定一个正整数 L,请问至少多少个 8 连在一起组成的正整数(即最小幸运数字)是 L 的倍数。

题解:

x个8连在一起组成的正整数可写作8(10x−1)/98(10^x-1)/98(10x−1)/9。现在要求一个最小的x,满足L∣8(10x−1)9L|\frac{8(10^x-1)}{9}L∣98(10x−1)​.
L∣8(10x−1)9L|\frac{8(10^x-1)}{9}L∣98(10x−1)​=9L∣8(10x−1)9L|8(10^x-1)9L∣8(10x−1)
我们设d=gcd(L,8)
有:gcd(L/d,8/d)=1
说明8/d与L/d互质
8(10^x-1)是9L的质数,有9Ld∣8d(10x−1)\frac{9L}{d}|\frac{8}{d}(10^x-1)d9L​∣d8​(10x−1)
因为8/d与L/d互质,所以9Ld∣(10x−1)\frac{9L}{d}|(10^x-1)d9L​∣(10x−1)
再推导有:10x≡1(mod9Ld)10^x \equiv1 (\bmod \frac{9L}{d})10x≡1(modd9L​)
引理:
若正整数a,n互质,则满足ax≡1(modn)a^x\equiv 1(\bmod n)ax≡1(modn)的最小正整数x0是ϕ(n)的约数\phi(n)的约数ϕ(n)的约数
所以我们只需要求出欧拉函数ϕ(9Ld)\phi(\frac{9L}{d})ϕ(d9L​),枚举它的所有约数,用快速幂判断是否符合条件即可。时间复杂度是O(Llog⁡L)O(\sqrt{L}\log{L})O(L​logL)
时间没问题,但是注意,你的longlong会被下面数据爆掉,所以要用到一个小技巧,叫龟速乘

1999999999
1213131311
1242342334
0

龟速乘其实就是把快速幂中乘法部分展开,将乘法转成加法做,每次运算都取mod,这样就不会爆

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef LOCALstartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{#ifdef LOCALendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
ll mul(ll a, ll b, ll mod)
{ll ans= 0;while (b) {if (b & 1)ans= (ans + a) % mod;a= (a + a) % mod;b>>= 1;}return ans;
}
ll poww(ll a, ll b, ll mod)
{ll ans= 1;while (b) {if (b & 1)ans= mul(ans, a, mod) % mod;a= mul(a, a, mod) % mod;b>>= 1;}return ans % mod;
}
ll phi(ll n)
{ll ans= n;for (int i= 2; i <= sqrt(n); i++) {if (n % i == 0) {ans= ans / i * 1ll * (i - 1);while (n % i == 0)n/= i;}}if (n > 1)ans= ans / n * 1ll * (n - 1);return ans;
}
int main()
{//rd_test();ll l;int cas= 0;while (cin >> l) {if (l == 0)break;ll mod= l / __gcd(8ll, l) * 9ll;ll p= phi(mod);ll ret= 1e18;for (ll x= 1; x <= sqrt(p); x++) {if (p % x != 0)continue;if (poww(10, x, mod) == 1)ret= min(ret, x);if (poww(10, p / x, mod) == 1)ret= min(ret, p / x);}printf("Case %d: ", ++cas);printf("%lld\n", ret == 1e18 ? 0 : ret);}return 0;//Time_test();
}

Acwing202. 最幸运的数字相关推荐

  1. AcWing 202 最幸运的数字

    文章目录 原题链接 题目分析 式子的化简 无解的判断 寻找第一个解 寻找最优解 解题代码 原题链接 AcWing 202 题目分析 看到题目,一点思路都没有.但是至少可以肯定的是,这只能是数学了.数学 ...

  2. 1048: Gardon的幸运数字

    1048: Gardon的幸运数字 时间限制: 1 Sec 内存限制: 128 MB 提交: 41 解决: 25 [提交][状态][讨论版] 题目描述 有的人喜欢收集邮票,有的人喜欢收集CD,有的人喜 ...

  3. 想知道数字1-13的深层含义吗?

    "0"象征空洞.神秘.虚无.死亡,但有时表示永恒.绝对的现实或本质.整体.宇宙之蛋或子宫.潜力以及生殖能力.毕达哥拉斯认为这一符号包容万物. "1"是一个完美的 ...

  4. 0x33.数学 - 同余

    目录 一.模运算的一些性质 二.费马小定理 三.欧拉定理 拓展欧拉定理 AcWing 202. 最幸运的数字 四.拓展欧几里得算法 翡蜀定理 拓展欧几里得算法 五.乘法逆元 求乘法逆元的三种方法 1. ...

  5. 蓝桥备赛第四周 同余+并查集

    文章目录 0x33 同余 同余类+剩余系+费马小定理+欧拉定理及推论 最幸运的数字 题解 这次的代码很多东西:欧拉函数快速求解,gcd,快速乘,各种定理,建议当模板背 10LL 转换成长整型 快速乘+ ...

  6. 《算法竞赛进阶指南》 0x30 数学知识 数论 题目

    196. 质数距离 https://www.acwing.com/problem/content/198/ 197. 阶乘分解 https://www.acwing.com/problem/conte ...

  7. 高通骁龙888来了!新命名就是为了中国,小米11将全球首发

    昨日晚间,2020高通骁龙技术峰会以线上的形式拉开帷幕.峰会首日,高通公司发布了新一代旗舰级骁龙移动平台--骁龙888. 有意思的是,高通解释为何这代芯片的命名为骁龙888而非骁龙875,原因是在中国 ...

  8. Codeforces Round #698 (Div. 2) (思维)

    A. Nezzar and Colorful Balls 题意:给你一个非递减序列的球,现在要给每个球涂色,要求每种颜色的球的值是单调递增的,问最少用多少种颜色 解题思路:根据题意,我们不难看出相同权 ...

  9. 外贸开发信用什么邮箱好?这个邮箱靓号注册网站不要错过

    国家进出口贸易越来越发达,涌进了许多外贸公司,一般外贸公司主要的业务往来重点在国外,把国外商品进口到国内来销售,或者将国内商品销售到国外.因此外贸公司需要电子邮件和海外的企业对接,并需要发送开发信取得 ...

最新文章

  1. caffe prototxt分析
  2. 一句话简单总结李航统计学习法各算法
  3. 从Deepwalk到Node2vec
  4. 2015年中国人才招聘趋势报告
  5. 什么叫做石英表_什么是石英表 石英表是什么意思
  6. linux debian硬盘安装,Debian硬盘安装方法
  7. 【硬核课】最新《图卷积神经网络GCN》2020概述,76页ppt,NTU-Xavier Bresson,纽约大学深度学习课程...
  8. python中迭代器_【Python】解析Python中的迭代器
  9. 【VHDL】半减器和全减器的设计
  10. JS中的debugger调试(谷歌浏览器)
  11. 小程序用什么开发?快速开发一个自己的微信小程序教程
  12. 连接Wifi时自动弹出登录页面是如何做到的?
  13. Win10隐藏状态栏图标的方法
  14. 域名系统(DNS)说明
  15. Linux解决No such file or dirctory方法
  16. 古诗+代码 = 绝配
  17. zlib minizip 压缩与解压缩
  18. 付宇泽四则运算试题生成,结对
  19. 如何在Keil uVision5建立飞思卡尔K60开发板的工程
  20. MTK,4G全网通模块设计资料

热门文章

  1. 用数学模型向你解释离婚
  2. sql企业管理器_Valentina Studio for mac(开源数据库管理器)
  3. startindex 不能大于字符串长度_玩转云端丨redis的5种对象与8种数据结构之字符串对象(下)...
  4. 有没有测试人心里的软件,心理测评,认识自己的有效工具:(二)你做的可能是假的心理测试...
  5. android vcard解析代码,Android使用vcard文件的方法简单实例
  6. mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记
  7. hadoop可以解决什么问题_聊一聊,临时工外包可以为企业解决什么问题
  8. matlab基于ssd的角点匹配_基于关键点的目标检测
  9. java os库_java-Mac OS X上的JNotify?
  10. leetcode96. 不同的二叉搜索树