怎么优化空间复杂度
查看原帖
怎么优化空间复杂度
405732
VecDouble楼主2022/6/30 13:01

怎么优化这个代码的空间复杂度?

  • 3030 分代码:
#include <cstdio>

#define mod %
#define ll long long

using namespace std;

const int N = 5e6 + 1;

int inv, n, p, k, ans, a[N];

ll s[N], sv[N], m[N];

inline ll qpow(ll a, ll b) {
	ll res = 1;
	
	while (b) {
		if (b & 1) {
			res = res * a mod p;
		}
		a = a * a mod p;
		b >>= 1;
	}
	
	return res mod p;
}

int main() {
	scanf("%d%d%d", &n, &p, &k);
	
	s[0] = 1;
	for(int i = 1; i <= n; ++i) {
		scanf("%d", a + i);
		s[i] = s[i - 1] * a[i] mod p;
	}
	
	m[0] = 1;
	for(int i = 1; i <= n; ++i) {
		m[i] = m[i - 1] * k mod p;
	}
	
	sv[n] = qpow(s[n], p - 2);
	
	for(int i = n; i > 0; --i) {
		sv[i - 1] = sv[i] * a[i] mod p;
	}
	
	for(int i = 1; i <= n; ++i) {
		inv = (sv[i] * s[i - 1] mod p) * m[i] mod p;
		ans = (inv + ans) mod p;
	}
	
	printf("%d", ans mod p);
	
	return 0;
}
2022/6/30 13:01
加载中...