[SDOI2011]計算器
YM zky跑得飛快的BSGS
數論模板題,複習下數論
過不了樣例都能A是鬧哪樣啊233
Code:
#include <cstdio>
#include <map>
#include <cmath>
using namespace std;
map<long long, long long> s;
long long y, z, p, T, k;
inline long long exgcd(long long a, long long b, long long &x, long long &y)
{
if(!b)
{
x = 1, y = 0;
return a;
}
else
{
long long d = exgcd(b, a % b, x, y), t = x;
x = y, y = t - a / b * y;
return d;
}
}
inline long long quick_pow(long long n, long long m, long long p)
{
long long res = 1;
while (m)
{
if (m & 1)
res = res * n % p;
m >>= 1;
n = n * n % p;
}
return res;
}
inline void INV(long long a, long long b, long long p)
{
a = quick_pow(a, p-2, p);
b = b * a % p;
if (!b)
puts("Orz, I cannot find x!");
else
printf("%lld\n", b);
}
inline long long gcd(long long a, long long b)
{
long long t;
while(b)
{
t = a % b;
a = b;
b = t;
}
return a;
}
inline long long inv(long long a)
{
if (gcd(a, p) == 1)
return quick_pow(a, p-2, p);
long long d, x, y;
d = exgcd(a, p, x, y);
return d == 1 ? (x + p) % p : -1;
}
inline void BSGS(long long a, long long b, long long p)
{
int i;
long long m = sqrt(p) + .5, v = inv(quick_pow(a,m,p)), e = 1;
s.clear();
s[1] = 0;
for(i = 1;i < m; ++i)
e = e * a % p, s[e] = i;
for(i = 0;i <= m; ++i)
{
if(s.count(b))
{
printf("%lld\n", i * m + s[b]);
return;
}
b = b * v % p;
}
puts("Orz, I cannot find x!");
}
inline void solve(long long type)
{
switch (type)
{
case (1) :{
printf("%d\n", quick_pow(y, z, p));
break;
}
case (2) :{
INV(y, z, p);
break;
}
case (3) :{
BSGS(y, z, p);
break;
}
}
}
char c;
inline void read(long long &x)
{
for (c = getchar();c > '9' || c < '0';c = getchar());
for (x = 0;c >= '0' && c <= '9';c = getchar())
x = (x << 3) + (x << 1) + c - '0';
}
int main()
{
read(T), read(k);
while (T--)
{
read(y), read(z), read(p);
solve(k);
}
}
相關文章
- BZOJ2242 [SDOI2011]計算器 快速冪+Exgcd+離散對數 數學專題第十題GC
- 計算器
- Java 計算器Java
- 日期計算器
- 健康計算器
- 四則運算計算器
- Java語言編寫計算器(簡單的計算器)Java
- 逆波蘭計算器
- android計算器Android
- web計算器案例Web
- c#計算器C#
- 簡單混合運算的計算器
- [題解] [SDOI2011] 消防
- AUTOCAD——快速計算器
- 用VB寫計算器
- 簡單版計算器
- MFC簡單計算器
- PHP簡單計算器PHP
- 計算機器與智慧計算機
- javafx開發計算器Java
- Object-C,四則運算計算器Object
- win10計算器怎麼用_win10如何開啟計算器Win10
- win10計算器在哪開啟_win10如何調出計算器Win10
- 小飛計算器(小飛可程式設計複數計算器)使用者手冊程式設計
- 純js版本房貸計算器JS
- 神奇的周幾計算器
- AYBO for Mac(多功能計算器)Mac
- JavaScript 簡單計算器效果JavaScript
- python簡易計算器Python
- 如何寫一個計算器?
- QTP測試Windows計算器QTWindows
- linux下的計算器Linux
- 十六進位制計算器
- 門票銷售計算器
- 【UniApp】-uni-app-專案計算功能(蘋果計算器)APP蘋果
- 計算機儲存器的容量計算和地址轉換計算機
- 在手機上程式設計:自制的小飛可程式設計複數計算器(小飛計算器)程式設計
- P2495 [SDOI2011] 消耗戰