Submission #140164

#TimeUsernameProblemLanguageResultExecution timeMemory
140164rdd6584Fully Generate (KRIII5_FG)C++14
2 / 7
1084 ms78528 KiB
#include <cstdio>
#include <algorithm>
#include <memory.h>
#include <iostream>
using namespace std;
typedef long long ll;
const int MOD = 1000000007;

int vec[20000001];

ll mp(ll a, ll b) {
	ll ret = 1;
	while (b) {
		if (b % 2) ret = ret * a % MOD;
		a = a * a % MOD;
		b /= 2;
	}

	return ret;
}

int main() {
	ll n;
	scanf("%lld", &n);

	if (n == 1) return !printf("1");
	if (n == 2) return !printf("2");
	if (n == 3) return !printf("4");

	int now = 3; // 수 이자 인덱스.
	ll cnt = 3; // 여태까지 이만큼 쌓음.
	ll ans = 4;
	vec[1] = 1, vec[2] = 2, vec[3] = 2;

	while (1) {
		if (vec[now] + cnt >= n) {
			ans = ans * mp(now, n - cnt) % MOD;
			break;
		}

		for (ll i = cnt + 1; i <= vec[now] + cnt && i <= 20000000; i++)
			vec[i] = now;

		// printf("%d : %d %lld %lld\n", now, vec[now], cnt + 1, cnt + vec[now]);

		ans = ans * mp(now, vec[now]) % MOD;
		cnt += vec[now];
		now++;
	}

	printf("%lld", ans);
}

Compilation message (stderr)

FG.cpp: In function 'int main()':
FG.cpp:24:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld", &n);
  ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...