Acwing-202-最幸运的数字(同余, 欧拉定理)
链接:
https://www.acwing.com/problem/content/204/
题意:
8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字。
现在给定一个正整数L,请问至少多少个8连在一起组成的正整数(即最小幸运数字)是L的倍数。
思路:
求出式子8(10^x-1)/9为8组成的正整数.
另其为G, 有L|G, 两边同乘9,9L | 8(10^x-1),为了去掉右边的8, 令右边为变为原来的1/8, 左边变为原来的gcd(L, 8)倍.
令d = gcd(8, L), 9L/d 与 8/L互质, 因为9L/d | 8/d(10^x-1), 所以有9L/d | (10^x-1).
剩下就是同余, 10^x = 1 (mod 9L/d)假装是同余符号.
根据欧拉定理, x为fai(9*L/d) 的约数.枚举再暴力判断.
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n;
LL Pow(LL a, LL b, LL mod)
{
LL res = 1;
while (b)
{
if (b&1)
res = (res*a)%mod;
a = (a*a)%mod;
b >>= 1;
}
return res;
}
LL Euler(LL x)
{
LL res = x;
for (int i = 2;i <= x;i++)
{
if (x%i == 0)
{
while (x % i == 0)
x /= i;
res = res/i*(i - 1);
}
}
if (x > 1)
res = res/x*(x-1);
return res;
}
LL Solve(int cnt, LL mod)
{
LL res = 1e18;
for (LL i = 1;i*i <= cnt;i++)
{
if (cnt%i == 0)
{
// cout << i << endl;
if (Pow(10, i, mod) == 1)
res = min(res, i);
if (Pow(10, cnt/i, mod) == 1)
res = min(res, cnt/i);
}
}
if (res == 1e18)
return 0;
return res;
}
int main()
{
int cnt = 0;
while (~scanf("%lld", &n) && n)
{
LL eul = Euler((9LL*n)/__gcd(8LL, n*9));
// cout << eul << endl;
LL res = Solve(eul, (9LL*n)/__gcd(8LL, n*9));
printf("Case %d: %lld\n", ++cnt, res);
}
return 0;
}
Acwing-202-最幸运的数字(同余, 欧拉定理)的更多相关文章
- AcWing 202. 最幸运的数字 (欧拉定理)打卡
8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字. 现在给定一个正整数L,请问至少多少个8连在一起组成的正整数(即最小幸运数字)是L的倍数. 输入格式 输入包含多组测试用例. ...
- [蓝桥杯]PREV-21.历届试题_回文数字
问题描述 观察数字:, 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入 ...
- Javascript中将数字转换为中文的方法
//js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...
- hihoCoder 1432 : JiLi Number(吉利数)
hihoCoder #1432 : JiLi Number(吉利数) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Driver Ji l ...
- [转]mysql分布式方案-分库拆表
来源:http://kissthink.com/archive/mysql-distributed-programs---and-warehouses-split-table.html 分库& ...
- mybatis 多参数处理
接口交互比较多, 所以 入参比较多, 有五个参数,是排序 参数, 跟这个五个参数排序,本来想写个对象的, 怕麻烦, 就把 五个参数 变成一个参数, 升序 1 ,降序2 ,比如 11221 ,第三第 ...
- [LeetCode] Count Different Palindromic Subsequences 计数不同的回文子序列的个数
Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...
- [LeetCode] K Inverse Pairs Array K个翻转对数组
Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...
- 剑指前端(前端入门笔记系列)—— JS基本数据类型及其类型转换
基本数据类型 ECMAScript中有5中简单数据类型性(也称为基本数据类型):Undefined.Null.Boolean.Number和String,还有一种复杂数据类型——Object,Obje ...
随机推荐
- Redis(1.8)Redis与mysql的数据库同步(缓存穿透与缓存雪崩)
[1]缓存穿透与缓存雪崩 [1.1]缓存和数据库间数据一致性问题 分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的 ...
- Spring MVCD框架中调用HanLP分词的方法
项目简要:关于java web的一个项目,用的Spring MVCd 框架.鉴于参与此次项目的人中并不是所人都做的Spring,为了能够提高效率,建议大家是先抛开SPring来写自己负责的模块,最后再 ...
- PHP中的闭包
1.语句结构 在PHP中,由于存在函数内部不能访问全局作用的,所以就需要一种可以引入上一级作用域的语法结构,这种就是 function () use () {} 将需要引入到这个函数作用于内的变量写入 ...
- java集合List解析
作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...
- ARST 第五周打卡
Algorithm : 做一个 leetcode 的算法题 /////////////////////////////////////////////////////////////////// // ...
- 12306火车票余票查询&Python实现邮件发送
查询余票接口 打开12306官网,并进入余票查询页面,同时开启chrome浏览器F12控制台,以北京到上海为例,搜索2018年10月1日的余票信息,点击搜索按钮,可以在控制台发送了一条GET请求,请求 ...
- JavaScript的几种循环方式
JavaScript提供了许多通过LOOPS迭代的方法.本教程解释了现代JAVASCRIPT中各种各样的循环可能性 目录: for forEach do...while while for...in ...
- phpexcel 生成大于26列数据
function excelExport2($fileName = '', $headArr = [], $data = [], $widths=[]) { ob_clean(); // $fileN ...
- 面试常考的js题目(三)
1.查找两个节点的最近的一个共同父节点,可以包括节点自身 function commonParentNode(oNode1, oNode2) { if(oNode1.contains(oNode2)) ...
- HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
引言:我们都知道HashSet这个类有add remove contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...