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 ...
随机推荐
- 二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/
这道题目很经典,具体如下: 已知遍历结果如下,试画出对应的二叉树: 前序:A B C E H F I J D G K 中序:A H E C I F J B D K G 解题要点: 1.前序.中序.后序 ...
- Linux之sed命令常见用法
1. sed(stream editor),流编辑器 linux中,主要中sed命令实现对文件的增删改替换查 名称 sed - 用于过滤和转换文本的流编辑器 SYNOPSIS sed [选项]... ...
- linux下定位异常消耗的线程实战分析
前言: 之前分享过一篇Linux开发coredump文件分析实战分享 ,今天再来分享一篇实战文章. 在我们嵌入式linux开发过程中,开发过程中我们经常会使用多进程.多线程开发.那么多线程使用过程中, ...
- springcloud - alibaba - 3 - 整合config - 更新完毕
0.补充 1.需求 如果我有这么一个请求:我想要gitee中的配置改了之后,我程序yml中的配置也可以跟着相应产生变化,利用原生的方式怎么做?一般做法如下: 而有了SpringCloud-alibab ...
- Spark(十)【RDD的读取和保存】
目录 一.文件类型 1.Text文件 2.Json文件 3.对象文件 4.Sequence文件 二.文件系统 1. MySQL 2. Hbase 一.文件类型 1.Text文件 读写 读取 scala ...
- flink02------1.自定义source 2. StreamingSink 3 Time 4窗口 5 watermark
1.自定义sink 在flink中,sink负责最终数据的输出.使用DataStream实例中的addSink方法,传入自定义的sink类 定义一个printSink(),使得其打印显示的是真正的ta ...
- Linux基础命令---echo打印内容到标准输出
echo echo指令可以输出内容到标准输出,以空白分割字符串,并且后面增加换行. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ec ...
- 【Java基础】JAVA中优先队列详解
总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...
- ubuntu qq/微信
Ubuntu qq&微信安装/启动脚本. Docker 本脚本依赖Docker,需要提前安装好Docker环境.参考https://yeasy.gitbooks.io/docker_pract ...
- 【前端】关于DOM节点
参考这个: https://juejin.cn/post/6844903849614901261 DOM树的根节点是document对象 DOM节点类型:HTML元素节点(element nodes) ...