ACM:ZOJ Problem Set - 3903

// @Author Jsen
// @Version V1.0.0
// @Date 2017/05/02

// ZOJ Problem Set - 3903
// Ant
// http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3903
// 学习取模,逆元
// 学习 typedef 学习 long long

// a1^2 + a2^2 + .... + an^2 = n(n+1)(2n+1)/6
// a1^3 + a2^3 + .... + an^3 = (n(n+1))^2/4
// 取模逆元(参考费马小定理):作用:将除法转为乘法(同余)
// a/b%p  b*c%p === 1 则c为b的逆元,有 a/b%p === a*c%p

// 结论公式
// (13 * n^4 + 26 * n^3 + 17 * n^2 + 4 * n) / 12
#include <stdio.h>

typedef long long LL;
#define MOD 1000000007ll
//  12 的 MOD 逆元
#define NI 83333334ll

int main() {
	int CASE;
	scanf("%d", &CASE);
	LL A, B;
	for(int i = 0; i<CASE; i++) {
		scanf("%lld", &A);
		A %= MOD;B = (A*A) % MOD;
		printf(
			"%lld\n", 
			(
				(13 * (B * B % MOD) % MOD) + 
				(26 * (B * A % MOD) % MOD) +
				(17 * B % MOD) +
				(4 * A % MOD)
			) % MOD * NI % MOD
		);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/jsenht/article/details/71082974