8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字。

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

输入格式

输入包含多组测试用例。

每组测试用例占一行,包含一个整数L。

当输入用例L=0时,表示输入终止,该用例无需处理。

输出格式

每组测试用例输出结果占一行。

结果为“Case 1: ”+一个整数N,N代表满足条件的最小幸运数字的位数。

如果满足条件的幸运数字不存在,则N=0。

数据范围

1≤L≤2∗1091≤L≤2∗109

输入样例:

8
11
16
0

输出样例:

Case 1: 1
Case 2: 2
Case 3: 0
题意:找到满足最小的满足要求的长度8,要求能被L整除
思路:首先我们可以化简式子
8*(10^x-1)/9 | L -> 8*(10^x-1)| 9*L -> (10^x-1) | 9*L/gcd(L,8) -> 10^x = 1 mod 9*L/gcd(L,80)
 化简到这种式子后我们一般有两个定理可以运用
费马小定理
如果a,p互质 a^p = a mod p 欧拉定理
如果 a,p 互质 a^phi(p) = 1 mod p;
phip) 不一定 是最优的答案,有可能是他的因子,所以我们还要枚举他的因子
#include<bits/stdc++.h>
#define maxn 305
#define mod 1000000007
#define MAX 100000000000000000
using namespace std;
typedef long long ll;
ll quick_pow(ll a,ll b,ll c){
ll ans=;
while(b){
if(b&) ans=(ans*a)%c;
b=b/;
a=(a*a)%c;
}
return ans;
}
ll phi(ll x){
ll sum=x;
for(int i=;i<=sqrt(x);i++){
if(x%i!=) continue;
sum=sum/i*(i-);
while(x%i==) x/=i;
}
if(x>) sum=sum/x*(x-);
return sum;
}
int main(){
ll n;
ll num=;
while(cin>>n){
if(n==) break;
ll z=n/__gcd(n,(ll))*;
ll x=phi(z);
ll ans=MAX;
for(int j=;j*j<=x;j++){
if(x%j!=) continue;
if(quick_pow(,j,z)==) ans=min(ans,(ll)j);
if(quick_pow(,x/j,z)==) ans=min(ans,(ll)x/j);
}
if(ans==MAX) ans=;
cout<<"Case "<<num++<<": "<</*ans==MAX?(ll)0:*/ans<<endl;
}
}
 

AcWing 202. 最幸运的数字 (欧拉定理)打卡的更多相关文章

  1. Acwing-202-最幸运的数字(同余, 欧拉定理)

    链接: https://www.acwing.com/problem/content/204/ 题意: 8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字. 现在给定一个正整数 ...

  2. AcWing 252. 树 (点分治)打卡

    题目:https://www.acwing.com/problem/content/254/ 题意:求一棵树上,路径<=k的有多少条 思路:点分治,我们用两个指针算solve函数,首先对算出来的 ...

  3. AcWing 224. 计算器 (BSGS算法)打卡

    题目:https://www.acwing.com/problem/content/226/ 题意:有一个计算器能完成三种功能 1.给定Y,Z,P,计算YZModPYZModP 的值: 2.给定Y,Z ...

  4. AcWing 220.最大公约数 欧拉函数打卡

    题目:https://www.acwing.com/problem/content/222/ 题意:求1-n范围内,gcd(x,y)是素数的对数 思路:首先我们可以针对每个素数p,那么他的贡献应该时  ...

  5. AcWing 215. 破译密码 (莫比乌斯反演)打卡

    达达正在破解一段密码,他需要回答很多类似的问题: 对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d. 作为达达的同学,达达希望得到你的帮助. ...

  6. AcWing 203. 同余方程 (线性同余方程)打卡

    求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 输入格式输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式输出只有一行,包含一个正整数x,表示最小正整数解. 输入数据保证 ...

  7. AcWing 197. 阶乘分解 (筛法)打卡

    给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...

  8. AcWing 160. 匹配统计 (哈希+二分) 打卡

    阿轩在纸上写了两个字符串,分别记为A和B. 利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B”匹配的长度. 不过阿轩是一个勤学好问的同学,他向你提出 ...

  9. hihoCoder 1432 : JiLi Number(吉利数)

    hihoCoder #1432 : JiLi Number(吉利数) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Driver Ji l ...

随机推荐

  1. ZOJ 1610 Count the Colors (线段树区间更新与统计)

    Painting some colored segments on a line, some previously painted segments may be covered by some th ...

  2. L1、L2损失函数、Huber损失函数

    L1范数损失函数,也被称为最小绝对值偏差(LAD),最小绝对值误差(LAE) L2范数损失函数,也被称为最小平方误差(LSE) L2损失函数 L1损失函数 不是非常的鲁棒(robust) 鲁棒 稳定解 ...

  3. Echarts 甘特图教程

    Echarts甘特图教程  echarts官网实例: https://gallery.echartsjs.com/editor.html?c=xEYpsVs30s 效果:  代码: <html& ...

  4. 修改Mysql数据库的字符集

    1.先检查数据库的默认字符集是否是引起不能存储中文的原因: 登录数据库后执行下面的命令 mysql> show variables like 'character%'; 由上图可以看出,data ...

  5. FATFS模块应用笔记

    FATFS模块应用笔记 如何港 范围 内存使用 模块尺寸缩小 长文件名 统一的API 重入 复制文件访问 性能有效文件访问 对闪存介质考虑 关键的第 延长使用FATFS API 关于FATFS许可证 ...

  6. spring 数据库字段映射

    当有复杂名称字段时: 在repository中写代码字段名 List<Grid> findByLocIsWithin(GeoJsonPolygon boundary); 可以添加field ...

  7. JS-模拟printf

    function printf(){ var args = [].slice.call(arguments), fmt = args.shift(), args_index = 0; ///%(填充的 ...

  8. Git命令操作

    安装配置 将其bin目录添加到path ssh -keygen -t rsa -C 自己的邮箱(获取ssh远程连接秘钥) 使用: 进入项目目录 右击进入git bash 执行git init gith ...

  9. 用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目

    目录 目录 前文列表 重构目录结构 重构代码 使用蓝图后的路由过程 总结 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World ...

  10. shell 过滤器(管道)

    将几个命令通过管道符组合在一起就是一个管道,通常,通过这种方式使用的命令就被称为过滤器. 过滤器会获得输入,通过某种方式修改其内容,然后将其输出. 常用的被用作过滤器使用的命令为: 1.awk---用 ...