「十二の地方試験は2019年、」サンプル(A +言及+ファックの数論)に分けチート:

「十二の地方試験は2019年、」サンプル(A +言及+ファックの数論)に分けチート:

https://loj.ac/problem/3050

二時間は平均に到達する必要があり、70個の以上のポイントを再生することができるだろう。

1_998244353

何も言うこと、迅速なパワーは、テスト#3のために、直接、精密バイナリ分解することはできません、それはまた、オイラーの定理によって最適化することができます。

1?

彼らは長い1Kによって弾性係数>最大、ので、最大値、アップが解けるまでを見つけるため、結果の数値は、非常に小さいことがわかりました。

1?+

場合考える\(19 ^ xとy ^ 19(X> Y)\) 差があると(19 ^ X-19 ^ \ Y = 19 ^ Y(19 ^ {X-Y} -1)\)

場合\(X、Y、XY \ ) が存在し、我々は得ることが、上記のすべての値を知ることができます:
\(モリブデンを| 19 19 ^^ XY-Y 19 ^(^ {X-Y} -1 19)。。。 \)

一つの方法は、グループ見つけることです\((X軸、Y軸、XYを)\)数が多すぎるので、この程度のすべてを列挙するために宣告数は、それが書き込みすることは困難です。

ディスカバリーは、多くのグループを見つけることができます((X軸、Y軸、XY)\)\ GCDの十分のすべての結果を取ります。

1_wa998244353

強力な推測で見つかった負のは、int型オーバーフローです。

実験は本当にケースですが、#7指標が大きい後、オーバーフローが速くないパワー、どのように行うことができますか?

ここでは脳はポンピングを行う方法を考えることはできません。

ノート誕生日パラドックス、約周期区間の長さによって、流出後とランダム差がないこと\(\ SQRT {モリブデン} \)

2P

まず、どのような間隔推測激しく、各行の長さをR-L + 1されている見つけます。

その後2,3,5,7-見て、品質の数は、実行する必要はありませんでした。

\(R <= 10 ^ { 12} \) 、ふるいの範囲とすることができる\(R&LT <= 10 ^ \ {18である})ミラーラビン、一定のカードに必要であってもよい(第20の質量の数の複数の第1の判定がされていません) 。

2U

または範囲、+ 1、-1、0を参照してください\(\ MUが\)を実行する必要はありませんでした。

品質係数のポラード・フォー分解は良いですが、ない場合は、各番号について、ポイント。

最初考えてみましょう\(10 ^ 6 \)乗算ゾーンに分解するプライム、それぞれのその後、残りの2つの素数の最大数。

完全な方形と素数を除去した後、それは残りの2つの素数の特定の数の積です。

TLEアップミラー・ラビンを分析し、最適化:

唯一の1解析\(> 10 ^ {12} \)の数。

2.乱数少ない発見は行くことができます。

2グラム

思考は知識の基礎であり、原始根のシリーズを殺す考えることはできません。

分析\(X \する)だけでなく、原始根であるかを決定する必要がある(X ^ {(MO- \ 1)/ P(Pは(MO-1)素因数)である} \) 1ではないではありません。

原始根によって次々原始根を見つける\(X ^ {J}( GCD(J、MO-1)= 1)\) 得ました。

2グラム?

列挙\(2 * 10 ^ 9 10 ^ 9 \)に 10分程度のすべての素数裁判官の、。

コード:


#include<bits/stdc++.h>
#define fo(i, x, y) for(int i = x, _b = y; i <= _b; i ++)
#define ff(i, x, y) for(int i = x, _b = y; i <  _b; i ++)
#define fd(i, x, y) for(int i = x, _b = y; i >= _b; i --)
#define ll long long
#define pp printf
#define hh pp("\n")
using namespace std;
	
namespace sub1 {
	ll ksm(ll x, ll y, ll mo) {
		ll s = 1;
		for(; y; y /= 2, x = x * x % mo)
			if(y & 1) s = s * x % mo;
		return s;
	}
	
	const int mo = 998244353;
	
	const int N = 1005;
	
	int n;
	char s[N]; int len;

	void work() {
		scanf("%d", &n);
		fo(i, 1, n) {
			scanf("%s", s + 1);
			len = strlen(s + 1);
			ll y = 0;
			fo(j, 1, len) {
				y = (y * 10 + s[j] - '0');
				y %= (mo - 1);
			}
			pp("%lld\n", ksm(19, y, mo));
		}
	}
}

ll ksm_19(char *s, ll mo) {
	int n = strlen(s + 1);
	int a[100];
	fo(i, 1, n) a[n - i + 1] = s[i] - '0';
	ll v = 1, x = 19;
	while(n > 0) {
		ll y = 0;
		fd(i, n, 1) {
			y = y * 10 + a[i];
			a[i] = y / 2; y %= 2;
		}
		if(y & 1) v = v * x % mo;
		x = x * x % mo;
		while(n > 0 && a[n] == 0) n --;
	}
	return v;
}

namespace sub2 {
	const int N = 1e5 + 5;
	
	int n;
	
	ll ans[N];

	char s[N][50];
	
	ll mo;
	
	void work() {
		mo = 1145141;
		scanf("%d", &n);
		fo(i, 1, n) {
			scanf("%s", s[i] + 1);
		}
		fo(i, 1, n) {
			pp("%lld\n", ksm_19(s[i], mo));
		}

	}
}

namespace sub3 {
	const int N = 10005;
	
	int n;
	ll a[N];
	
	ll mo = 5211600617818708273ll;	
	
	ll mul(ll x, ll y, ll mo) {
		ll z = (long double) x * y / mo;
		z = x * y - z * mo;
		if(z < 0) z += mo; else if(z >= mo) z -= mo;
		return z;
	}
	
	ll ksm(ll x, ll y, ll mo) {
		ll s = 1;
		for(; y; y /= 2, x = mul(x, x, mo))
			if(y & 1) s = mul(s, x, mo);
		return s;
	}
	
	void work() {
		scanf("%d", &n);
		fo(i, 1, n) {
			scanf("%lld", &a[i]);
			pp("%lld\n", ksm(19, a[i], mo));
		}
	}
}

namespace sub4 {
	const int mo = 998244353;
	
	int a[10000005];
	
	map<int, int> bz;
	
	int n;
	
	void work() {
		int s = 1; a[0] = s;
		int l, r;
		fo(i, 1, 1e7) {
			s = s * 19 % mo;
			if(bz[s]) {
				l = bz[s], r = i - 1;
				break;
			}
			bz[s] = i;
			a[i] = s;
		}
		scanf("%d", &n);
		fo(i, 1, n) {
			ll x; scanf("%lld", &x);
			if(x <= r) {
				pp("%d\n", a[x]);
			} else {
				x -= l;
				x %= (r - l + 1);
				pp("%d\n", a[l + x]);
			}
		}
	}
}

namespace sub5 {
	
	const int N = 1e6 + 5;
	
	int p[N], p0, bp[N];
	
	void sieve(int n) {
		fo(i, 2, n) {
			if(!bp[i]) {
				p[++ p0] = i;
			}
			for(int j = 1; i * p[j] <= n; j ++) {
				bp[i * p[j]] = 1;
				if(i % p[j] == 0) break;
			}
		}
	}
	
	int n;
	int bz[N];
	
	ll mul(ll x, ll y, ll mo) {
		ll z = (long double) x * y / mo;
		z = x * y - z * mo;
		if(z < 0) z += mo; else if(z >= mo) z -= mo;
		return z;
	}
	
	#define ull unsigned long long
	ull rx = 1e9 + 7;
	ll randx(ll x, ll y) {
		rx ^= rx << 17;
		rx ^= rx >> 23;
		rx ^= rx << 39;
		return rx % (y - x + 1) + x;
	}
		
	ll ksm(ll x, ll y, ll mo) {
		ll s = 1;
		for(; y; y /= 2, x = mul(x, x, mo))
			if(y & 1) s = mul(s, x, mo);
		return s;
	}
	
	int pd(ll n) {
		fo(i, 1, 20) if(n == p[i]) return 1;
		fo(i, 1, 20) if(n % p[i] == 0) return 0;
		ll s = n - 1, c = 0;
		while(s % 2 == 0) s /= 2, c ++;
		fo(T, 1, 20) {
			ll x = randx(1, n - 1);
			x = ksm(x, s, n);
			fo(j, 1, c) {
				ll y = mul(x, x, n);
				if(y == 1 && x != 1 && x != n - 1) return 0;
				x = y;
			}
			if(x != 1) return 0;
		}
		return 1;
	}
	
	void work() {
		sieve(1e6);
		ll x, y;
		scanf("%d", &n);
		fo(i, 1, n) {
			scanf("%lld %lld", &x, &y);
			for(ll i = x; i <= y; i ++) {
				putchar(pd(i) ? 'p' : '.');
			}
			hh;
		}
	}
}

namespace sub6 {
	const int N = 1e6 + 5;
	
	int p[N], p0, bp[N];
	
	void sieve(int n) {
		fo(i, 2, n) {
			if(!bp[i]) {
				p[++ p0] = i;
			}
			for(int j = 1; i * p[j] <= n; j ++) {
				bp[i * p[j]] = 1;
				if(i % p[j] == 0) break;
			}
		}
	}
	
	int n;
	
	int bz[N];
	ll a[N], mu[N];
	
	#define ull unsigned long long
	ull rx = 1e9 + 7;
	ll randx(ll x, ll y) {
		rx ^= rx << 17;
		rx ^= rx >> 23;
		rx ^= rx << 39;
		return rx % (y - x + 1) + x;
	}
			
	ll mul(ll x, ll y, ll mo) {
		ll z = (long double) x * y / mo;
		z = x * y - z * mo;
		if(z < 0) z += mo; else if(z >= mo) z -= mo;
		return z;
	}
	
	ll ksm(ll x, ll y, ll mo) {
		ll s = 1;
		for(; y; y /= 2, x = mul(x, x, mo))
			if(y & 1) s = mul(s, x, mo);
		return s;
	}
	
	int pd(ll n) {
		ll s = n - 1, c = 0;
		while(s % 2 == 0) s /= 2, c ++;
		fo(T, 1, 3) {
			ll x = randx(1, n - 1);
			x = ksm(x, s, n);
			fo(j, 1, c) {
				ll y = mul(x, x, n);
				if(y == 1 && x != 1 && x != n - 1) return 0;
				x = y;
			}
			if(x != 1) return 0;
		}
		return 1;
	}
	
	void work() {
		sieve(1e6);
		scanf("%d", &n);
		fo(ii, 1, n) {
			ll x, y;
			scanf("%lld %lld", &x, &y);
			fo(i, 0, y - x) {
				a[i] = i + x;
				mu[i] = 1;
			}
			fo(_i, 1, p0) {
				ll i = p[_i];
				ll j = x / i * i; if(j < x) j += i;
				while(j <= y) {
					ll &v = a[j - x], &v2 = mu[j - x];
					int zs = 0;
					while(v % i == 0) v /= i, zs ++;
					if(zs > 1) v2 = 0; else v2 = -v2;
					j += i;
				}
			}
			fo(i, 0, y - x) {
				if(a[i] > 1) {
					ll t = sqrt(a[i]);
					if(t * t == a[i]) {
						mu[i] = 0;
					} else {
						if(a[i] <= 1e12 || pd(a[i]))
							mu[i] = -mu[i];
					}
				}
				putchar(mu[i] == 1 ? '+' : (mu[i] == -1 ? '-' : '0'));
			}
			hh;
		}
	}
}

namespace sub7 {
	const int N = 1e6 + 5;
	
	int p[N], p0, bp[N];
	
	void sieve(int n) {
		fo(i, 2, n) {
			if(!bp[i]) {
				p[++ p0] = i;
			}
			for(int j = 1; i * p[j] <= n; j ++) {
				bp[i * p[j]] = 1;
				if(i % p[j] == 0) break;
			}
		}
	}
	
	int n;
	
	ll mo;
	
	ll ksm(ll x, ll y) {
		ll s = 1;
		for(; y; y /= 2, x = x * x % mo)
			if(y & 1) s = s * x % mo;
		return s;
	}
	
	int d[100005], d0;
	
	ll u[100], u0;
	void fen(ll mo) {
		d0 = u0 = 0;
		ll x = mo - 1;
		for(int i = 1; i <= p0 && p[i] * p[i] <= x; i ++) if(x % p[i] == 0) {
			u[++ u0] = p[i];
			while(x % p[i] == 0) x /= p[i];
		}
		if(x > 1) u[++ u0] = x;
		fo(i, 1, u0) d[++ d0] = (mo - 1) / u[i];
	}
	
	int pdg(ll x) {
		fo(i, 1, d0) if(ksm(x, d[i]) == 1)
			return 0;
		return 1;
	}
	
	int bz[14000005];
	
	void work() {
		sieve(1e6);
		scanf("%d", &n);
		fo(T, 1, n) {
			ll x, y;
			scanf("%lld %lld", &x, &y);
			if(x == 233333333) {
				mo = 1515343657;
			} else scanf("%lld", &mo);
			fen(mo);
			if(y - x <= 8e5) {
				fo(i, x, y)  putchar(pdg(i) ? 'g' : '.');
			} else {
				ll g;
				for(g = 2; g <= 11; g ++) if(pdg(g))
					break;
				ll s = 1;
				fo(i, 1, mo - 1) {
					s = s * g % mo;
					int ky = 1;
					fo(j, 1, u0) if(i % u[j] == 0) ky = 0;
					if(ky) bz[s] = 1;
				}
				fo(i, x, y) putchar(bz[i] ? 'g' : '.');
			}
			hh;
		}
	}
}

string str;

int main() {
	freopen("software.in", "r", stdin);
	freopen("software.out", "w", stdout);
	cin >> str;
	if(str == "1_998244353") {
		sub1 :: work();
		return 0;
	}
	if(str == "1?") {
		sub2 :: work();
		return 0;
	}
	if(str == "1?+") {
		sub3 :: work();
		return 0;
	}
	if(str == "1wa_998244353") {
		sub4 :: work();
		return 0;
	}
	if(str == "2p") {
		sub5 :: work();
		return 0;
	}
	if(str == "2u") {
		sub6 :: work();
		return 0;
	}
	if(str == "2g" || str == "2g?") {
		sub7 :: work();
		return 0;
	}
}

おすすめ

転載: www.cnblogs.com/coldchair/p/12584572.html