AcWing 202. 最幸运的数字 (欧拉定理)打卡
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题意:找到满足最小的满足要求的长度8,要求能被L整除
Case 2: 2
Case 3: 0
思路:首先我们可以化简式子
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. 最幸运的数字 (欧拉定理)打卡的更多相关文章
- Acwing-202-最幸运的数字(同余, 欧拉定理)
链接: https://www.acwing.com/problem/content/204/ 题意: 8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字. 现在给定一个正整数 ...
- AcWing 252. 树 (点分治)打卡
题目:https://www.acwing.com/problem/content/254/ 题意:求一棵树上,路径<=k的有多少条 思路:点分治,我们用两个指针算solve函数,首先对算出来的 ...
- AcWing 224. 计算器 (BSGS算法)打卡
题目:https://www.acwing.com/problem/content/226/ 题意:有一个计算器能完成三种功能 1.给定Y,Z,P,计算YZModPYZModP 的值: 2.给定Y,Z ...
- AcWing 220.最大公约数 欧拉函数打卡
题目:https://www.acwing.com/problem/content/222/ 题意:求1-n范围内,gcd(x,y)是素数的对数 思路:首先我们可以针对每个素数p,那么他的贡献应该时 ...
- AcWing 215. 破译密码 (莫比乌斯反演)打卡
达达正在破解一段密码,他需要回答很多类似的问题: 对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d. 作为达达的同学,达达希望得到你的帮助. ...
- AcWing 203. 同余方程 (线性同余方程)打卡
求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 输入格式输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式输出只有一行,包含一个正整数x,表示最小正整数解. 输入数据保证 ...
- AcWing 197. 阶乘分解 (筛法)打卡
给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...
- AcWing 160. 匹配统计 (哈希+二分) 打卡
阿轩在纸上写了两个字符串,分别记为A和B. 利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B”匹配的长度. 不过阿轩是一个勤学好问的同学,他向你提出 ...
- hihoCoder 1432 : JiLi Number(吉利数)
hihoCoder #1432 : JiLi Number(吉利数) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Driver Ji l ...
随机推荐
- bzoj 1876
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1876 二进制gcd 学到了(' ' ) 高精还得压位,最开始没写压位,然后调了1h ...
- 复位和时钟控制(RCC)
一.系统复位 复位除了部分RCC寄存器和备份区域以外的其他所有的寄存器: 来源: NRST引脚上的低电平(外部复位) WWDG计数结束 IWDG计数结束 软件复位(通过NVIC) 低电压管理的复位 电 ...
- Integer之常用方法
public static int parseInt(String s, int radix) throws NumberFormatException {} // radix进制 s 换成 10进制 ...
- Python每日一题 007
题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...
- vue2.0 组件的生命周期
vue官方文档中给出的vue生命周期的流程图 如下: 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执行. <!DOCTYPE html ...
- win10操作系统 64位 原版 百度网盘下载
iso镜像文件4.57G,这里压缩成两个两个包便于上传网盘: 使用时候,直接下载两个压缩包解压成镜像文件便可安装: 链接:https://pan.baidu.com/s/1JNgxuBzdzFpp-p ...
- pycharm 代码无法自动补全(自动顺带)的解决方法
pycharm 中输入关键字等,代码不能自动补全,这种情况一般是pycharm设置了省电模式 点击 File —Power Save Mode,取消勾选 再次输入,代码可以自动顺带出来了
- nodejs操作消息队列RabbitMQ
一. 什么是消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已.其主要用途:不同进程Process/ ...
- 网神SecVSS 3600漏洞扫描系统
网神SecVSS 3600漏洞扫描系统严格按照计算机信息系统安全的国家标准.相关行业标准设计.编写.制造.网神SecVSS 3600漏洞扫描系统可以对不同操作系统下的计算机(在可扫描IP范围内)进行漏 ...
- 什么是索引?Mysql目前主要的几种索引类型
一.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...