Description has only two Sentences(hdu3307)
Description has only two Sentences
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1108 Accepted Submission(s): 345
Your task is to calculate the smallest positive integer k that ak mod a0 = 0.
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 typedef struct node
12 {
13 LL x;
14 LL id;
15 } ss;
16 ss ans[600000];
17 ss bns[600000];
18 pair<LL,LL>exgcd(LL n,LL m);
19 LL gcd(LL n,LL m);
20 LL quick(LL n,LL m,LL mod);
21 bool cmp(node p,node q)
22 {
23 if(p.x==q.x)
24 return p.id<q.id;
25 else return p.x<q.x;
26 }
27 LL er(int n,int m,LL k);
28 int main(void)
29 {
30 LL x,y,a;
31 while(scanf("%lld %lld %lld",&x,&y,&a)!=EOF)
32 {
33 int kp = 0;
34 LL t = y/(x-1);//printf("%lld\n",t);
35 LL tt = t%a;
36 if(t%a==0)
37 {
38 printf("1\n");
39 }
40 else
41 {
42 t%=a;
43 int flag = 0;
44 LL cnt = 0;
45 LL as = 1;
46 while(true)
47 {
48 LL gc = gcd(x,a);
49 if(gc == 1)
50 break;
51 else if(t%gc==0)
52 {
53 cnt++;
54 a/=gc;
55 as*=x/gc;
56 t/=gc;
57 as%=a;
58 }
59 else if(t%gc)
60 {
61 kp = 1;
62 break;
63 }
64 if(t*as%gc==t)
65 {
66 flag = 1;
67 break;
68 }
69 }
70 if(kp)printf("Impossible!\n");
71 else if(flag)
72 printf("%lld\n",cnt+1);
73 else
74 {
75 LL v = sqrt(1.0*a);
76 pair<LL,LL>acc = exgcd(x,a);
77 LL xx = quick(x,v,a);
78 int i;//printf("%lld\n",xx);
79 acc.first = (acc.first%a+a)%a;
80 LL sum = t*acc.first%a;
81 int cn = 0;
82 for(i = 1; i <= v; i++)
83 {
84 ans[cn].x= sum%a;
85 ans[cn].id = i;
86 cn++;
87 sum = sum*acc.first%a;
88 }
89 sort(ans,ans+cn,cmp);
90
91 bns[0]=ans[0];
92 LL cc = ans[0].x;
93 int ac = 1;
94 for(i = 1; i < cn; i++)
95 {
96 if(ans[i].x!=cc)
97 {
98 cc = ans[i].x;
99 bns[ac].x = ans[i].x;
100 bns[ac].id = ans[i].id;
101 ac++;
102 }
103 }
104 LL akk = as*tt%a;
105 LL idd;//printf("%lld\n",bns[2].x);
106 for(i = 0; i <= v; i++)
107 {
108 idd = er(0,ac-1,akk);
109 if(idd!=-1)
110 break;
111 akk = akk*xx%a;
112 }
113 if(i==v+1)
114 {
115 printf("Impossible!\n");
116 }
117 else
118 {
119 printf("%lld\n",cnt+i*v+idd);
120 }
121 }
122 }
123 }
124 return 0;
125 }
126 pair<LL,LL>exgcd(LL n,LL m)
127 {
128 if(m==0)
129 return make_pair(1,0);
130 else
131 {
132 pair<LL,LL>ak = exgcd(m,n%m);
133 return make_pair(ak.second,ak.first-(n/m)*ak.second);
134 }
135 }
136 LL gcd(LL n,LL m)
137 {
138 if(m==0)
139 return n;
140 else return gcd(m,n%m);
141 }
142 LL quick(LL n,LL m,LL mod)
143 {
144 LL ak = 1;
145 n %= mod;
146 while(m)
147 {
148 if(m&1)
149 ak =ak*n%mod;
150 n = n*n%mod;
151 m>>=1;
152 }
153 return ak;
154 }
155 LL er(int n,int m,LL k)
156 {
157 int mid = (n+m)/2;
158 if(n>m)return -1;
159 if(bns[mid].x == k)
160 {
161 return bns[mid].id;
162 }
163 else if(bns[mid].x < k)
164 {
165 return er(mid+1,m,k);
166 }
167 else return er(n,mid-1,k);
168 }
baby_step
Description has only two Sentences(hdu3307)的更多相关文章
- hdu 3307 Description has only two Sentences (欧拉函数+快速幂)
Description has only two SentencesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- Description has only two Sentences(欧拉定理 +快速幂+分解质因数)
Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU 3307 Description has only two Sentences
数学实在是差到不行了…… #include <cstdio> #include <cstring> #include <algorithm> #include &l ...
- hdu3307 欧拉函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3307 Description has only two Sentences Time Limit: 3 ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- [SinGuLaRiTy] 数论题目复习
[SinGuLaRiTy-1020] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 1464] Hankson 题目描述 H ...
- hdu 3307(欧拉函数+好题)
Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- 【LeetCode】884. Uncommon Words from Two Sentences 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计 日期 题目地址:https://leetc ...
- 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...
随机推荐
- 学习java的第五天
一.今日收获 1.java程序设计完全手册第一章节的小总结 2.完成了部分例题验证解答. 二.今日难题 1.java语言与c++语言的不同点. 2.有例题验证不出来 三.明日目标 1.复习java程序 ...
- The Ultimate Guide to Buying A New Camera
[photographyconcentrate] 六级/考研单词: embark, thrill, excite, intimidate, accessory, comprehensive, timi ...
- Vue3 父子组件通信
1.父传子父组件:在子组件上通过 v-bind绑定属性子组件:先定义下基本类型,然后通过setup的第一个参数取获取传过来的值(详细代码见下面)2.子传父父组件:在子组件上绑定一个事件,并定义回调子组 ...
- RecyclerView实现侧滑删除、置顶、滑动
1.首先在build.gradle里添加 compile 'com.github.mcxtzhang:SwipeDelMenuLayout:V1.2.1' 2.设置recyclerView的item布 ...
- Linux学习 - fdisk分区
一.fdisk命令分区过程 系统一旦重启,分区将消失 1 添加新硬盘 直接在虚拟机上添加 2 查看新硬盘 fdisk -l 3 分区 fdisk /dev/sdb fdisk进入/dev/sdb硬件设 ...
- 【Java 8】 Reduce方法
一:reduce rudece方法:从一个流中生成一个值 三个重载方法: Optional<T> reduce(BinaryOperator<T> accumulator); ...
- java中的++i是线程安全的吗?
java中的++i是线程安全的吗?为什么?怎么使它线程安全呢? 先说答案: 非线程安全 先说下为什么是非线程安全的? 从Java内存模型说起 Java内存模型规定了所有的便利都存储在主内存中,每个线程 ...
- Nginx区分搜索引擎
目录 一.简介 二.配置 一.简介 场景: 当从百度点进来显示中文页面,而谷歌显示英文界面. 原理: 根据referer头来判断 二.配置 这样配置以后,凡是从百度或者google点过来的请求都会跳转 ...
- Python __new__ 方法解释与使用
解释 我们通常把 __init__ 称为构造方法,这是从其他语言借鉴过来的术语. 其实,用于构建实例的是特殊方法 __new__:这是个类方法(使用特殊方式处理,因此不必使用 @classmethod ...
- 从来也科技UiBot 6.0社区版全线免费,看RPA距离“人人可用”还有多远
来也科技RPA产品UiBot 6.0社区版全线免费,背后的逻辑是什么? 来也科技CPO褚瑞:开发者生态才是RPA厂商的真正护城河 来也科技UiBot 6.0社区版全线免费,RPA距离真正人人可用还有多 ...