60pts 求调
查看原帖
60pts 求调
1369607
luckyqwq楼主2024/7/25 11:54
#include <bits/stdc++.h>
#define mod 10007
#define i128 __int128
using namespace std;
i128 a, m, b, P;
bool f;
inline i128 read()
{
    i128 r = 0, w = 1;
    char c = getchar();
    while(c < '0' || c > '9')
    {
        if(c == '-') w = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9')
    {
        r = (r << 3) + (r << 1) + (c ^ 48);
        c = getchar();
    }
    return r * w;
}
inline i128 _read()
{
    i128 r = 0, w = 1;
    char c = getchar();
    while(c < '0' || c > '9')
    {
        if(c == '-') w = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9')
    {
        r = ((r << 3) % P) + ((r << 1) % P) + (c ^ 48);
        if(r >= P) f = 1;
        r %= P;
        c = getchar();
    }
    return r * w;
}
i128 phi(i128 x)//预处理欧拉函数
{
    i128 res = x;
    for (i128 i = 2;i * i <= x;i ++)
    {
        if (x % i == 0)
        {
            res -= (res / i);
            while(x % i == 0)
            {
                x /= i;
            }
        }
    }
    if(x > 1) return res -= (res / x);
    return res;
}
void print(i128 x) {
    if (!x) return;
    print(x / 10);
    std::putchar(x % 10 + '0');
}
i128 fastpow(i128 a, i128 y)
{
    i128 res = 1;
    while(y)
    {
        if(y & 1) res = (res * a) % mod, res = (res + mod) % mod;
        a = (a * a) % mod;
        y >>= 1;
    }
    return res % mod;
}
int main()
{
	int n;
	cin >> n;
	P = phi(mod);
	//P = mod;
    a = _read();if(f == 1) a += P;
    f = 0;
    b = _read();
    if(f == 1) b += P;
    i128 k = fastpow(a, b) % mod;
    for (int i = 3;i <= n; ++ i)
    {
        f = 0;
    	b = _read();
	    if(f == 1) b += P;
	    k = fastpow(k, b) % mod;
	}
	if(k == 0)
	{
		cout << 0 << "\n";
	}
	else
	{
		print(k);
	}
}
2024/7/25 11:54
加载中...