The Luckiest number(hdu2462)
The Luckiest number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1163 Accepted Submission(s): 363
The last test case is followed by a line containing a zero.
m和10必定互质,否则无解。
于是根据欧拉定理,10^(Euler(m)) = 1(mod m) 。由于题目要求最小的解,解必然是Euler(m)的因子。
需要注意的是,对于10^x,由于m太大,直接快速幂相乘的时候会超long long
这题我开始用baby-step,超时了;
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<set>
7 #include<math.h>
8 #include<map>
9 using namespace std;
10 typedef long long LL;
11 pair<LL,LL>exgcd(LL n,LL m);
12 LL gcd(LL n,LL m);
13 LL quick(LL n,LL m,LL mod);
14 LL mul(LL n, LL m,LL p);
15 int slove(LL n);
16 LL phi(LL n);
17 bool prime[1000005];
18 int ans[1000005];
19 LL fen[1000005];
20 int main(void)
21 {
22 LL n;
23 int i,j;
24 int cn = 0;
25 for(i = 2; i <= 1000; i++)
26 {
27 if(!prime[i])
28 {
29 for(j = i; (i*j) <= 1000000; j++)
30 {
31 prime[i*j] = true;
32 }
33 }
34 }
35 for(i = 2; i <= 1000000; i++)
36 {
37 if(!prime[i])
38 {
39 ans[cn++] = i;
40 }
41 }
42 //printf("%d\n",cn);
43 int __ca = 0;
44 while(scanf("%lld",&n),n!=0)
45 {
46 LL gc = gcd(8,n);
47 n = 9*n/gc;
48 LL oula = phi(n);
49 LL x = gcd(n,10);//printf("%lld\n",n);
50 //printf("%lld\n",x);
51 printf("Case %d: ",++__ca);
52 if(x!=1)
53 {
54 printf("0\n");
55 }
56 else
57 {
58 int k = slove(oula);
59 //printf("%d\n",k);
60 for(i = 0;i < k;i++)
61 {
62 LL akk =quick(10,fen[i],n);
63 if(akk==1)
64 {
65 break;
66 }
67 }//printf("%d\n",10);
68 printf("%lld\n",fen[i]);
69 }
70 }
71 return 0;
72 }
73 int slove(LL n)
74 { int cn = 0;int i,j;
75 for(i = 1;i < sqrt(1.0*n);i++)
76 {
77 if(n%i==0)
78 {
79 if(n/i==i)
80 {
81 fen[cn++] = i;
82 }
83 else
84 {
85 fen[cn++] = i;
86 fen[cn++] = n/i;
87 }
88 }
89 }
90 sort(fen,fen+cn);
91 return cn;
92 }
93 LL phi(LL n)
94 {
95 int f = 0;
96 bool flag = false;
97 LL ask =n;
98 while(n>1)
99 {
100 while(n%ans[f]==0)
101 {
102 if(!flag)
103 {
104 flag = true;
105 ask/=ans[f];
106 ask*=ans[f]-1;
107 }
108 n/=ans[f];
109 }
110 f++;
111 flag = false;
112 if((LL)ans[f]*(LL)ans[f]>n)
113 {
114 break;
115 }
116 }
117 if(n > 1)
118 {
119 ask/=n;
120 ask*=(n-1);
121 }
122 return ask;
123 }
124 pair<LL,LL>exgcd(LL n,LL m)
125 {
126 if(m==0)
127 return make_pair(1,0);
128 else
129 {
130 pair<LL,LL>ak = exgcd(m,n%m);
131 return make_pair(ak.second,ak.first-(n/m)*ak.second);
132 }
133 }
134 LL gcd(LL n,LL m)
135 {
136 if(m==0)
137 return n;
138 else return gcd(m,n%m);
139 }
140 LL quick(LL n,LL m,LL mod)
141 {
142 LL ak = 1;
143 n %= mod;
144 while(m)
145 {
146 if(m&1)
147 ak =mul(ak,n,mod);
148 n = mul(n,n,mod);
149 m>>=1;
150 }
151 return ak;
152 }
153 LL mul(LL n, LL m,LL p)
154 {
155 n%=p;
156 m%=p;
157 LL ret=0;
158 while(m)
159 {
160 if(m&1)
161 {
162 ret=ret+n;
163 ret%=p;
164 }
165 m>>=1;
166 n<<=1;
167 n%=p;
168 }
169 return ret;
170 }
The Luckiest number(hdu2462)的更多相关文章
- 4.Single Number && Single Number (II)
Single Number: 1. Given an array of integers, every element appears twice except for one. Find that ...
- PAT 甲级 1019 General Palindromic Number(20)(测试点分析)
1019 General Palindromic Number(20 分) A number that will be the same when it is written forwards or ...
- Python3 数字Number(六)
Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var ...
- BZOJ 3000: Big Number (数学)
题目: https://www.lydsy.com/JudgeOnline/problem.php?id=3000 题解: 首先n很大,O(n)跑不过,那么就要用一些高端 而且没听过 的东西——sti ...
- 【CF1017C】The Phone Number(构造)
题意:要求构造一个1-n的排列,使得它的LIS+LDS最小 n<=1e5 思路:一个百度之星时候从LYY处听来的结论:1-n随机排列的LIS期望是根号级别的 考虑将LIS与LDS都构造成根号级别 ...
- Python学习笔记 (2.1)标准数据类型之Number(数字)
Python3中,数字分为四种——int,float,bool,complex int(整型) 和数学上的整数表示没啥区别,没有大小限制(多棒啊,不用写整数高精了),可正可负.还可表示16进制,以 0 ...
- The Luckiest number(hdu 2462)
给定一个数,判断是否存在一个全由8组成的数为这个数的倍数 若存在则输出这个数的长度,否则输出0 /* 个人感觉很神的一道题目. 如果有解的话,会有一个p满足:(10^x-1)/9*8=L*p => ...
- POJ 3696 The Luckiest number (欧拉函数,好题)
该题没思路,参考了网上各种题解.... 注意到凡是那种11111..... 22222..... 33333.....之类的序列都可用这个式子来表示:k*(10^x-1)/9进而简化:8 * (10^ ...
- 第一届山东省ACM——Phone Number(java)
Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...
随机推荐
- bluetooth sig bluetooth asia-深圳之行
18年5月30日深圳参见蓝牙展会 主要了解下面 使用蓝牙和区块链构建室内导航定位系统和去中心化的MESH网络 -- 核心是通过iBeacon 来广播数据,典型用例是手机对手机的使用蓝牙进行交互,业界称 ...
- A Child's History of England.13
Then came the boy-king, Edgar, called the Peaceful, fifteen years old. Dunstan, being still the real ...
- 容器之分类与各种测试(四)——multiset
multiset是可重复关键字的关联式容器,其与序列式容器相比最大的优势在于其查找效率相当高.(牺牲空间换取时间段) 例程 #include<stdexcept> #include< ...
- Android Bitmap 全面解析(一)加载大尺寸图片
压缩原因:1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为;2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory ...
- ssm-book 整合案例
一:环境及要求 环境: IDEA最新版 MySQL 5.7.19 Tomcat 9 Maven 3.6 要求: 需要掌握 MyBatis:Spring:SpringMVC:MySQL数据库 ...
- 【Java 设计】如何优雅避免空指针调用
空指针引入 为了避免空指针调用,我们经常会看到这样的语句 if (someobject != null) { someobject.doCalc();} 最终,项目中会存在大量判空代码,多么丑陋繁冗! ...
- Redis操作命令合集
目录 一.客户端命令 二.sql命令 一.客户端命令 #读取配置文件启动 redis-server redis.conf #关闭 Redis,Redis服务器将断开与客户端链接,产生持久化文件,平滑关 ...
- 基于bootstrap的模态框使用
使用步骤两步 1:按顺序引入以下三个文件 <link rel="stylesheet" href="../css/bootstrap.min.css"&g ...
- 分布式可扩展web体系结构设计实例分析
Web分布式系统设计准则 下面以一个上传和查询图片的例子来说明分布式web结构的设计考虑和常用的提高性能的方法.该例子提供上传图片和下载图片两个简单功能,并且有一下假设条件?: - 可以存储无上限数量 ...
- .NET内存性能分析宝典
.NET Memory Performance Analysis 知道什么时候该担心,以及在需要担心的时候该怎么做 译者注 **作者信息:Maoni Stephens ** - 微软架构师,负责.NE ...