https://www.cnblogs.com/31415926535x/p/11448002.html
Had this moment of lazy, creating tears today
I remember six months to go to Wuhan to participate in the provincial tournament, then A title is a generalized Euler descending board problem, then come back up for a moment, because where there is no post, so he put the measured data Code throw ,,, then ,, network game yesterday in Nanjing on the bombing ,,, as generalized Euler descending board problem, and then forgot it in writing because they want out ,, I had been thinking about before recall the wording ,, then to the end did not get out ,,, emmmm ,,
After the match looked at someone else's solution ,, treatment of others and, of course another very clever solution two kinds of return values (pair) is a large force of standard process ,,,, (to come up before the final wording or each can launch ,, are beginning to suspect that there was not really introduced to ,,,,,
Thinking
Generalized Euler descending nothing to say ,, is the formula:
For seeking \ (a ^ b (mod \ p) \) can be converted to:
\[ a^b = \begin{cases} a^{b \% \phi (p)} &gcd(a, p)=1 \\ a^b &gcd(a, p) \neq 1, b < \phi (p) \\ a^{b \% \phi (p) + \phi (p)} &gcd(a, p) \neq 1, b \ge \phi (p)\\ \end{cases} \]
The formula is simple ,, but if you are seeking (a_1 ^ {a_2 ^ {a_3 ^ {...}}} (mod \ p) \) \ like this value, then obviously the demand from recursively down (beginning brought about the demand from the bottom up ,, Hu mouth for some time ,,,,) ,, but then recursively find the time to consider every \ (b \) and (\ phi (p \) \ ) relationship, and then choose which one equation ,,, so ,, you can use a trouble pair
what to hold a flag variable to determine whether or not a layer of recursive \ (+ \ Phi (the p-) \) ,, another clever way is to modify the modulo process ,, ,,, so we do not consider the specific derivation here
All steps into this modulo:
inline ll modulo(ll x, ll mod){return x < mod ? x : x % mod + mod;}
This ensures \ (B \ GE \ Phi (P) \) ,, then it is determined that the less
topic
Nanjing network game B supper_log
Nanjing network game B supper_log
This question is subject by several pushing means is required a sample can be seen \ (a ^ {a ^ { a ^ {a ^ {...}}}} mod \ m ( a total of b a) \) values ,, seeking direct descending on it ,, sentenced to remember special b = 0
Code
Group in many ways big brother used to reset modulo flow
#include <bits/stdc++.h>
#define aaa cout<<233<<endl;
#define endl '\n'
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
// mt19937 rnd(time(0));
const int inf = 0x3f3f3f3f;//1061109567 > 1e9
const ll linf = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-7;
const double pi = 3.14159265358979;
const int maxn = 1e3 + 5;
const int maxm = 1e3 + 5;
const int mod = 1e9 + 7;
ll f(ll x, ll a)
{
if(x < 1)return -1;
return 1 + f((ll)(log(x) / log(a)), a);
}
inline ll modulo(ll x, ll mod){return x < mod ? x : x % mod + mod;}
inline ll pow_(ll a, ll b, ll p)
{
ll ret = 1;
while(b)
{
if(b & 1)ret = modulo(ret * a, p);
a = modulo(a * a, p);
b >>= 1;
}
return ret;
}
inline ll phi(ll x)
{
ll ans = x;
for(ll i = 2; i * i <= x; ++i)
{
if(x % i == 0)
{
ans = ans / i * (i - 1);
while(x % i == 0)x /= i;
}
}
if(x > 1)ans = ans / x * (x - 1);
return ans;
}
ll gcd(ll a, ll b)
{
if(b == 0)return a;
return gcd(b, a % b);
}
ll f(ll a, ll b, ll k, ll p)
{
if(p == 1)return 1;
if(k == 0)return 1;
return pow_(a, f(a, a, k - 1, phi(p)), p);
}
int main()
{
// double pp = clock();
// freopen("233.in", "r", stdin);
// freopen("233.out", "w", stdout);
// ios_base::sync_with_stdio(0);
// cin.tie(0);cout.tie(0);
int t; cin >> t;
while(t--)
{
ll a, b, m;
cin >> a >> b >> m;
// cout << a << b << m << endl;
if(b == 0)
{
cout << 1 % m << endl;
continue;
}
ll ans = f(a, a, b, m) % m;
// if(a == 1)ans = 1 % m;
// cout << ans << " " << ans % m << endl;
cout << ans << endl;
}
// cout << endl << (clock() - pp) / CLOCKS_PER_SEC << endl;
return 0;
}
pair recording layer
That's a large force of standard process ,, ,, directly change the next input
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1000010;
int prime[N + 1], isprime[N + 1];
int tot, phi[N + 1];
struct P
{
ll ans;
bool v;
P(ll _ans, bool _v)
{
ans = _ans;
v = _v;
}
};
ll gcd(ll a, ll b)
{
return b ? gcd(b, a % b) : a;
}
P qpow(ll A, ll B, ll C)
{
ll re = 1;
bool flag = 1;
while (B)
{
if (B & 1)
{
if ((re *= A) >= C)
flag = 0;
re = re % C;
}
B = B >> 1;
if (B)
{
if (A >= C)
flag = 0;
A %= C;
if ((A *= A) >= C)
flag = 0;
A %= C;
}
}
return P(re, flag);
}
void getphi()
{
phi[1] = 1;
isprime[1] = 1;
for (int i = 2; i <= N; i++)
{
if (!isprime[i])
{
prime[++tot] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= tot && i * prime[j] <= N; j++)
{
isprime[i * prime[j]] = 1;
if (i % prime[j] == 0)
{
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
else
phi[i * prime[j]] = phi[i] * phi[prime[j]];
}
}
}
inline ll Euler(ll x)
{
return phi[x];
//题目可以再复杂一点模数可以到longlong
// ll ans = x;
// for (int i = 1; i <= tot && prime[i] * prime[i] <= x; i++)
// {
// if (x % prime[i] == 0)
// {
// ans = ans / prime[i] * (prime[i] - 1);
// while (x % prime[i] == 0)
// x /= prime[i];
// }
// }
// if (x > 1)
// ans = ans / x * (x - 1);
// return ans;
}
P f(ll a, ll b, ll k, ll p)
{
if (p == 1)
return P(0, 0);
if (k == 0)
return P(a % p, a < p);
ll ep = Euler(p);
P tmp = f(b, b, k - 1, ep);
if (gcd(a, p) == 1)
return qpow(a, tmp.ans, p);
if (tmp.v == false)
{
tmp.ans += ep;
}
return qpow(a, tmp.ans, p);
}
int main()
{
//double pp = clock();
// freopen("233.in", "r", stdin);
// freopen("233.out", "w", stdout);
ll a, b, k, p;
getphi();
int t;
while (~scanf("%d", &t))
{
while (t--)
{
scanf("%lld %lld %lld", &a, &k, &p);
b = a;
if(k == 0)
{
printf("%lld\n", 1 % p);
continue;
}
printf("%lld\n", f(a, b, k - 1, p).ans);
}
}
//cout<<(clock()-pp)/CLOCKS_PER_SEC;
return 0;
}
cf-906 D. Power Tower
Suddenly a lot of people cross this road two years ago that ah ,, hhhhh
The value of a power range of a sequence index of this problem is descending, he is seeking the same routine of ,,, ,, ,, is this great modulus can not always count his time out of phi ,, ,, otherwise so to the memory of what unordered_map
it ,, or pre-modulus at all phi because demand has been for a number phi down ,, in fact, the number of small ,,,
#include <bits/stdc++.h>
#define aaa cout<<233<<endl;
#define endl '\n'
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
// mt19937 rnd(time(0));
const int inf = 0x3f3f3f3f;//1061109567 > 1e9
const ll linf = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-7;
const double pi = 3.14159265358979;
const int maxn = 1e5 + 5;
const int maxm = 1e3 + 5;
const int mod = 1e9 + 7;
ll a[maxn];
inline ll modulo(ll x, ll mod){return x < mod ? x : x % mod + mod;}
inline ll pow_(ll a, ll b, ll p)
{
ll ret = 1;
while(b)
{
if(b & 1)ret = modulo(ret * a, p);
a = modulo(a * a, p);
b >>= 1;
}
return ret;
}
unordered_map<ll, ll> phi_;
inline ll phi(ll x)
{
if(phi_[x])return phi_[x];
ll ans = x;
ll t = x;
for(ll i = 2; i * i <= x; ++i)
{
if(x % i == 0)
{
ans = ans / i * (i - 1);
while(x % i == 0)x /= i;
}
}
if(x > 1)ans = ans / x * (x - 1);
phi_[t] = ans;
return ans;
}
//这里根据题意来更改,k表示共有k个指数
ll f(ll a, ll b, ll k, ll p)
{
if(p == 1)return 1;
if(k == 0)return 1;
return pow_(a, f(a, a, k - 1, phi(p)), p);
}
ll f(ll l, ll r, ll p)
{
if(p == 1)return 1;
if(l == r + 1)return 1;
return pow_(a[l], f(l + 1, r, phi(p)), p);
}
int main()
{
// double pp = clock();
// freopen("233.in", "r", stdin);
// freopen("233.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
ll n, m;
cin >> n >> m;
for(int i = 1; i <= n; ++i)cin >> a[i];
int q; cin >> q;
while(q--)
{
ll l, r; cin >> l >> r;
cout << f(l, r, m) % m << endl;
}
// cout << endl << (clock() - pp) / CLOCKS_PER_SEC << endl;
return 0;
}
cf-gym-101550 E Exponial
This problem is seeking a \ (n-n-^ {{{{^}. 1-n-2-^ {} {}. 3-n-^ ^ {{{...}}}}}}. 1 MOD \ P \) , ,, above board with altered on it ,,,
#include <bits/stdc++.h>
#define aaa cout<<233<<endl;
#define endl '\n'
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
// mt19937 rnd(time(0));
const int inf = 0x3f3f3f3f;//1061109567 > 1e9
const ll linf = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-7;
const double pi = 3.14159265358979;
const int maxn = 1e5 + 5;
const int maxm = 1e3 + 5;
const int mod = 1e9 + 7;
inline ll modulo(ll x, ll mod){return x < mod ? x : x % mod + mod;}
inline ll pow_(ll a, ll b, ll p)
{
ll ret = 1;
while(b)
{
if(b & 1)ret = modulo(ret * a, p);
a = modulo(a * a, p);
b >>= 1;
}
return ret;
}
unordered_map<ll, ll> phi_;
inline ll phi(ll x)
{
if(phi_[x])return phi_[x];
ll ans = x;
ll t = x;
for(ll i = 2; i * i <= x; ++i)
{
if(x % i == 0)
{
ans = ans / i * (i - 1);
while(x % i == 0)x /= i;
}
}
if(x > 1)ans = ans / x * (x - 1);
phi_[t] = ans;
return ans;
}
// ll f(ll l, ll r, ll p)
// {
// if(p == 1)return 1;
// if(l == r + 1)return 1;
// return pow_(a[l], f(l + 1, r, phi(p)), p);
// }
ll f(ll a, ll p)
{
if(p == 1)return 1;
if(a == 1)return 1;
return pow_(a, f(a - 1, phi(p)), p);
}
int main()
{
// double pp = clock();
// freopen("233.in", "r", stdin);
// freopen("233.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
ll n, m;
while(cin >> n >> m)cout << f(n, m) % m << endl;
// cout << endl << (clock() - pp) / CLOCKS_PER_SEC << endl;
return 0;
}
Looks like enough ,,, number theory is the most do not want to touch the stuff ,, emmmm ,,, but had little time to master something ,,,,
(end....)