「POJ3696」The Luckiest number【数论,欧拉函数】
# 题解
一道数论欧拉函数和欧拉定理的入门好题。
虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧。
首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\times 8\)。
那么可以列出一个下面的方程
\[\frac{(10^x-1)}{9}\times 8=L\times k\]
设\(d=gcd(9L,8)=gcd(L,8)\)
\[\frac89(10^x-1)=Lk\]
\[\frac{8(10^x-1)}d=\frac{9Lk}{d}\]
令\(p=\frac8d,q=\frac{9L}d\),易证\(p\)和\(q\)互质。
\[p(10^x-1)=qk\]
可得\(q|10^x-1\),所以得到了\(10^x\equiv1(mod \ q)\)
根据欧拉定理,当\(10\)和\(q\)互质,必定有一组解,是\(\varphi(q)\)
那么最小的一组解一定是\(\varphi(q)\)的一个约数。
那么欧拉函数计算一下,然后枚举一下约数,快速幂判断一下就好了。
代码
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#define ll long long
#define db double
using namespace std;
ll L, ans;
bool fg;
ll gcd(ll x, ll y) { return y == 0 ? x : gcd(y, x % y) ; }
ll mulmod(ll x, ll y, ll mod) {
ll res = 0ll;
for (; y; y >>= 1) { if (y & 1) res = (res + x) % mod; x = (x << 1) % mod; }
return res;
}
ll power(ll x, ll y, ll mod) {
ll res = 1ll;
for (; y; y >>= 1) { if (y & 1) res = mulmod(res, x, mod); x = mulmod(x, x, mod); }
return res;
}
ll euler(ll x) {
ll res = x;
for (ll i = 2; i * i <= x; i ++) {
if (x % i == 0) {
res = res / i * (i - 1);
while (x % i == 0) x /= i;
}
}
if (x > 1) res = res / x * (x - 1);
return res;
}
int main() {
int cas = 0;
while (~scanf("%I64d", &L) && L) {
ll d = gcd(L, 8), q = 9 * L / d; fg = 0;
if (gcd(q, 10) != 1) printf("Case %d: 0\n", ++ cas);
else {
ll phi = euler(q), m = sqrt((db)(phi));
ans = phi;
for (int i = 1; i <= m; i ++)
if (phi % i == 0 && power(10, i, q) == 1) { ans = i; fg = 1; break; }
if (!fg) for (int i = m; i >= 2; i --) {
if (phi % i == 0 && power(10, phi / i, q) == 1) { ans = phi / i; break; }
}
printf("Case %d: %I64d\n", ++ cas, ans);
}
}
return 0;
}
「POJ3696」The Luckiest number【数论,欧拉函数】的更多相关文章
- POJ 3696 The Luckiest number (欧拉函数,好题)
该题没思路,参考了网上各种题解.... 注意到凡是那种11111..... 22222..... 33333.....之类的序列都可用这个式子来表示:k*(10^x-1)/9进而简化:8 * (10^ ...
- LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...
- 数论-欧拉函数-LightOJ - 1370
我是知道φ(n)=n-1,n为质数 的,然后给的样例在纸上一算,嗯,好像是找往上最近的质数就行了,而且有些合数的欧拉函数值还会比比它小一点的质数的欧拉函数值要小,所以坚定了往上找最近的质数的决心—— ...
- 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)
题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...
- BZOJ 4026 dC Loves Number Theory (主席树+数论+欧拉函数)
题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[ ...
- 数论 - 欧拉函数的运用 --- poj 3090 : Visible Lattice Points
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5636 Accepted: ...
- BZOJ-2190 仪仗队 数论+欧拉函数(线性筛)
今天zky学长讲数论,上午水,舒爽的不行..后来下午直接while(true){懵逼:}死循全程懵逼....(可怕)Thinking Bear. 2190: [SDOI2008]仪仗队 Time Li ...
- HDU1695-GCD(数论-欧拉函数-容斥)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Codeforces_776E: The Holmes Children (数论 欧拉函数)
题目链接 先看题目中给的函数f(n)和g(n) 对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n) 证明f(n)=phi(n) 设有命题 对任意自然 ...
随机推荐
- 用友云开放平台之API网关
本文介绍选择API网关应考虑的几方面内容,API网关在微服务框架中的作用,API网关如何选型,用友云开放平台的API网关可以做什么. 随着互联网的快速发展,当前已步入移动互联.物联网时代.企业内部系统 ...
- html总结:表格中的文字居中
<style> table { text-align:center; } </style>
- 转:Linux下查看tomcat占用端口
https://blog.csdn.net/liufuwu1/article/details/71123597[root@server-crm mysql]# ps -ef | grep " ...
- sql之cursor的简介和字符串拆分(split)与游标的使用
字符串拆分(split)与游标的使用 CREATE TABLE Plates ( ,), ) NOT NULL, [BusinessId] INT NOT NULL, ) ),),), SELECT ...
- oracle计算时间常用函数
--ddd:一年中的第几天 select to_char(sysdate,'ddd') from dual --d:一周中的第几天 星期天是第一天 所以要-1select to_char(sysdat ...
- vue的定位
高德定位 https://blog.csdn.net/YY110621/article/details/87921605(copy) 话不多说,直接写方法步骤,需要的直接拿去放在自己项目中即可使用先看 ...
- CLOUD计算产品成本嵌套
1.产品入库单入库的半成品A (无单价) 2.其他出库单上(共耗的)出库的半成品A(无单价) 不管在同车间还是不同车间内都是认定为嵌套的,所以可以计算2遍成本,第1遍不考虑嵌套,第2遍就能计算进去了.
- IIS下载地址
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1038
- Flutter 常用工具类库common_utils
地址:https://pub.flutter-io.cn/packages/common_utils#-readme-tab- Dart常用工具类库 common_utils 1.TimelineUt ...
- Java多线程4:Thread中的静态方法
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...