Visit of the Great

1.前言

真好玩,蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤蛤

2.题解

令 G ( x ) = { 1 , 2 ∣ x 2 , 2 ∤ x g c d ( k 2 i + 1 , k 2 i + 1 + 1 ) = g c d ( k 2 i + 1 , k 2 i + 1 − k 2 i ) = g c d ( k 2 i + 1 , k 2 i × ( k 2 i − 1 ) ) = g c d ( k 2 i + 1 , k 2 i − 1 ) = g c d ( ( k 2 i + 1 ) − ( k 2 i − 1 ) , k 2 i − 1 ) = g c d ( 2 , k 2 i − 1 ) = G ( k ) \begin{aligned}令 G (x) = \begin{cases} 1, 2 \mid x \\ 2, 2 \nmid x \end{cases}\\gcd (k^{2^{i}} + 1, k^{2^{i + 1}} + 1) &= gcd (k^{2^{i}} + 1, k^{2^{i + 1}} - k^{2^{i}})\\&= gcd (k^{2^{i}} + 1, k^{2^{i}} \times (k^{2^{i}} - 1))\\&= gcd (k^{2^{i}} + 1, k^{2^{i}} - 1)\\&= gcd ((k^{2^{i}} + 1) - (k^{2^{i}} - 1), k^{2^{i}} - 1)\\&= gcd (2, k^{2^{i}} - 1)\\&= G (k)\end{aligned} G(x)={1,2x2,2xgcd(k2i+1,k2i+1+1)=gcd(k2i+1,k2i+1k2i)=gcd(k2i+1,k2i×(k2i1))=gcd(k2i+1,k2i1)=gcd((k2i+1)(k2i1),k2i1)=gcd(2,k2i1)=G(k)

l c m i = l r ( k 2 i + 1 )   m o d   p = l c m ( l c m i = l r − 2 ( k 2 i + 1 ) , ( k 2 r − 1 + 1 ) × ( k 2 r + 1 ) g c d ( k 2 r − 1 + 1 , k 2 r + 1 ) ) = l c m ( l c m i = l r − 2 ( k 2 i + 1 ) , ( k 2 r − 1 + 1 ) × ( k 2 r + 1 ) G ( k ) ) = l c m ( l c m i = l r − 3 ( k 2 i + 1 ) , ( k 2 r − 2 + 1 ) × ( k 2 r − 1 + 1 ) × ( k 2 r + 1 ) G ( k ) × G ( k ) ) = . . . \begin{aligned}\mathrm{lcm}_{i = l}^{r} (k^{2^{i}} + 1) \bmod p &= lcm (lcm_{i = l}^{{r - 2}} (k^{2^{i}} + 1), \frac{(k^{2^{r - 1}} + 1) \times (k^{2^{r}} + 1)}{gcd (k^{2^{r - 1}} + 1, k^{2^{r}} + 1)} )\\&= lcm (lcm_{i = l}^{{r - 2}} (k^{2^{i}} + 1), \frac{(k^{2^{r - 1}} + 1) \times (k^{2^{r}} + 1)}{G (k)} )\\&= lcm (lcm_{i = l}^{{r - 3}} (k^{2^{i}} + 1), \frac{(k^{2^{r - 2}} + 1) \times (k^{2^{r - 1}} + 1) \times (k^{2^{r}} + 1)}{G (k) \times G (k)} ) \\ &=... \end{aligned} lcmi=lr(k2i+1)modp=lcm(lcmi=lr2(k2i+1),gcd(k2r1+1,k2r+1)(k2r1+1)×(k2r+1))=lcm(lcmi=lr2(k2i+1),G(k)(k2r1+1)×(k2r+1))=lcm(lcmi=lr3(k2i+1),G(k)×G(k)(k2r2+1)×(k2r1+1)×(k2r+1))=...

l c m i = l r ( k 2 i + 1 )   m o d   p = ∏ i = l r ( k 2 i + 1 ) G ( K ) r − l   m o d   p = ∏ i = l r ( k 2 i + 1 ) G r − l ( K )   m o d   p \begin{aligned}\mathrm{lcm}_{i = l}^{r} (k^{2^{i}} + 1) \bmod p &= \frac{\prod_{i = l}^{r} (k^{2^{i}} + 1)}{G(K)^{r - l}} \bmod p\\&= \frac{\prod_{i = l}^{r} (k^{2^{i}} + 1)}{G^{r - l}(K)} \bmod p\end{aligned} lcmi=lr(k2i+1)modp=G(K)rli=lr(k2i+1)modp=Grl(K)i=lr(k2i+1)modp

发现这个小东西 ∏ i = l r ( ( k 2 l ) i − l + 1 ) \prod_{i = l}^{r} ((k^{2^{l}})^{i - l} + 1) i=lr((k2l)il+1) 就是 ∑ i = 0 r = 2 r − l + 1 − 1 ( k 2 l ) i \sum\limits_{i = 0}^{r = 2^{r - l + 1} - 1} (k^{2^{l}})^i i=0r=2rl+11(k2l)i (二进制拆分的唯一性)
( k 2 l ) 2 r − l + 1 − 1 k 2 l − 1 = k 2 r + 1 − 1 k 2 l − 1 \begin{aligned} \frac{(k^{2^{l}})^{2^{r - l + 1}} - 1}{k^{2^{l}} - 1}\\= \frac{k^{2^{r + 1}} - 1}{k^{2^{l}} - 1}\end{aligned} k2l1(k2l)2rl+11=k2l1k2r+11

l c m i = l r ( k 2 i + 1 )   m o d   p = k 2 r + 1 − 1 ( k 2 l − 1 ) × G r − l ( K ) \begin{aligned}\mathrm{lcm}_{i = l}^{r} (k^{2^{i}} + 1) \bmod p &= \frac{k^{2^{r + 1}} - 1}{(k^{2^{l}} - 1) \times G^{r - l}(K)}\end{aligned} lcmi=lr(k2i+1)modp=(k2l1)×Grl(K)k2r+11

然后有一个很 ?? 的 ?? 特判, k   m o d   p = = 0 k \bmod p == 0 kmodp==0 时要搞很多奇怪的东西,去 ? 好了。

因为当 k   m o d   p = = 0 k \bmod p == 0 kmodp==0 时, 2 r + 1   m o d   ( p − 1 ) 2^{r + 1} \bmod (p - 1) 2r+1mod(p1) 如果为零,则它会算出来一个 k 0   m o d   p = 1 k ^ 0 \bmod p = 1 k0modp=1,所以不对,这时候改为返回值为 0 0 0 就好了。

#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib> 
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define fi first
#define se second
#define db double
#define LL long long
#define ULL unsigned long long
#define PII pair <int, int>
#define MP(x,y) make_pair (x, y)
#define rep(i,j,k) for (int i = (j); i <= (k); ++i)
#define per(i,j,k) for (int i = (j); i >= (k); --i)

template <typename T> T Max (T x, T y) { return x > y ? x : y; }
template <typename T> T Min (T x, T y) { return x < y ? x : y; }
template <typename T> T Abs (T x) { return x > 0 ? x : -x; }
template <typename T>
void read (T &x) {
    x = 0; T f = 1;
    char ch = getchar ();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar ();
    }
    while (ch >= '0' && ch <= '9') {
        x = (x << 3) + (x << 1) + ch - '0';
        ch = getchar ();
    }
    x *= f;
}
template <typename T, typename... Args>
void read (T &x, Args&... args) {
    read (x); read (args...);
}
char For_Print[25];
template <typename T>
void write (T x) {
    if (x == 0) { putchar ('0'); return; }
    if (x < 0) { putchar ('-'); x = -x; }
    int poi = 0;
    while (x) {
        For_Print[++poi] = x % 10 + '0';
        x /= 10;
    }
    while (poi) putchar (For_Print[poi--]);
}
template <typename T>
void print (T x, char ch) {
    write (x); putchar (ch);
}

const LL Mod = 1e9 + 7;

LL sqre (LL x) { return x * x % Mod; }
void del (LL &x, LL y) { ((x -= y) < 0) && (x += Mod); }
void add (LL &x, LL y) { ((x += y) >= Mod) && (x -= Mod); }

LL t, k, l, r, p;

LL quick_pow (LL x, LL y, LL M) {
    LL res = 1;
    while (y) {
        if (y & 1) res = (res * x) % M;
        x = (x * x) % M; y >>= 1;
    }
    return res;
}
LL inv (LL x, LL M) {
    return quick_pow (x, M - 2, M);
}
LL G (LL x) {
    return (x % 2 == 0 ? 1 : 2);
}
LL f (LL x) {
	return k % p == 0 ? 0 : quick_pow (k, quick_pow (2, x, p - 1), p);
}

int main () {
    // freopen ("D:\\lihan\\1.in", "r", stdin);
    // freopen ("D:\\lihan\\1.out", "w", stdout);
    read (t);
    while (t--) {
        read (k, l, r, p);
        
		if (p == 2) {
			printf ("%d\n", (k % 2 == 1 ? 0 : 1));
			continue;
		}
		
        LL res = 0;
		if (f (l) == 1) {
			res = quick_pow (2, r - l + 1, p);
		}
		else {
			
//			printf ("f (r + 1) = %lld, f (l) = %lld\n", f (r + 1), f (l));
			
			res = f (r + 1) - 1 + p;
			res = (res * inv (f (l) - 1 + p, p)) % p;
		}
		
//		cout << res << endl;
		
        res *= inv (quick_pow (G (k), r - l, p) % p, p);
        res = (res % p + p) % p;
        print (res, '\n');
    }
    return 0;
}

3.一些编辑很久的错误式子,pi用没有😓,下次我就要用这个出题 /wx

g c d i = l r ( k 2 i + 1 )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l + 1 r ( ( k 2 i + 1 ) − ( k 2 i − 1 + 1 ) ) )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l + 1 r ( k 2 i − k 2 i − 1 ) )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l + 1 r ( k 2 i − 1 ⋅ 2 − k 2 i − 1 ) )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l + 1 r ( k 2 i − 1 × k 2 i − 1 − k 2 i − 1 ) )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l + 1 r ( k 2 i − 1 × ( k 2 i − 1 − 1 ) ) )   m o d   p = g c d ( ( k 2 l + 1 ) , k 2 l ⋅ g c d i = l + 1 r ( k 2 i − 1 − 1 ) )   m o d   p = g c d ( ( k 2 l + 1 ) , g c d i = l r − 1 ( k 2 i − 1 ) )   m o d   p \begin{aligned}\mathrm{gcd}_{i = l}^{r} (k^{2^{i}} + 1) \bmod p &= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l + 1}^{r} \Big( (k^{2^{i}} + 1) - (k^{2^{i - 1}} + 1) \Big) \bigg) \bmod p\\&= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l + 1}^{r} \Big( k^{2^{i}} - k^{2^{i - 1}} \Big) \bigg) \bmod p\\&= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l + 1}^{r} \Big( k^{2^{i - 1} \cdot 2} - k^{2^{i - 1}} \Big) \bigg) \bmod p\\&= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l + 1}^{r} \Big( k^{2^{i - 1}} \times k^{2^{i - 1}} - k^{2^{i - 1}} \Big) \bigg) \bmod p \\&= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l + 1}^{r} \Big( k^{2^{i - 1}} \times (k^{2^{i - 1}} - 1) \Big) \bigg) \bmod p\\&= gcd \bigg( (k^{2^{l}} + 1), k^{2^{l}} \cdot \mathrm{gcd}_{i = l + 1}^{r} \Big( k^{2^{i - 1}} - 1 \Big) \bigg) \bmod p\\&= gcd \bigg( (k^{2^{l}} + 1), \mathrm{gcd}_{i = l}^{r - 1} \Big( k^{2^{i}} - 1 \Big) \bigg) \bmod p\end{aligned} gcdi=lr(k2i+1)modp=gcd((k2l+1),gcdi=l+1r((k2i+1)(k2i1+1)))modp=gcd((k2l+1),gcdi=l+1r(k2ik2i1))modp=gcd((k2l+1),gcdi=l+1r(k2i12k2i1))modp=gcd((k2l+1),gcdi=l+1r(k2i1×k2i1k2i1))modp=gcd((k2l+1),gcdi=l+1r(k2i1×(k2i11)))modp=gcd((k2l+1),k2lgcdi=l+1r(k2i11))modp=gcd((k2l+1),gcdi=lr1(k2i1))modp

g c d i = l r ( k 2 i − 1 ) = g c d ( k 2 l − 1 , g c d i = l + 1 r ( k 2 i − k 2 i − 1 ) )   m o d   p = g c d ( k 2 l − 1 , k 2 l ⋅ g c d i = l r − 1 ( k 2 i − 1 ) )   m o d   p = ( k 2 l − 1 )   m o d   p \begin{aligned}\mathrm{gcd}_{i = l}^{r} \Big( k^{2^{i}} - 1 \Big)&= gcd \Big( k^{2^{l}} - 1, \mathrm{gcd}_{i = l + 1}^{r} (k^{2^{i}} - k^{2^{i - 1}}) \Big) \bmod p\\&= gcd \Big( k^{2^{l}} - 1, k^{2^{l}} \cdot \mathrm{gcd}_{i = l}^{r - 1} (k^{2^{i}} - 1) \Big) \bmod p\\&= (k^{2^{l}} - 1) \bmod p\end{aligned} gcdi=lr(k2i1)=gcd(k2l1,gcdi=l+1r(k2ik2i1))modp=gcd(k2l1,k2lgcdi=lr1(k2i1))modp=(k2l1)modp

所以原式可以化为

g c d i = l r ( k 2 i + 1 )   m o d   p = g c d ( ( k 2 l + 1 ) , ( k 2 l − 1 ) )   m o d   p \begin{aligned}\mathrm{gcd}_{i = l}^{r} (k^{2^{i}} + 1) \bmod p &= gcd ((k^{2^{l}} + 1), (k^{2^{l}} - 1)) \bmod p\end{aligned} gcdi=lr(k2i+1)modp=gcd((k2l+1),(k2l1))modp

posted @ 2022-01-11 21:15  C2022lihan  阅读(14)  评论(0编辑  收藏  举报