蓝桥杯 阶乘求和 容斥 头模定理

180 阅读1分钟

image.png

暴力法

[15届蓝桥杯填空题秒出答案,就用这两招!帮你领先对手30分钟~_哔哩哔哩_bilibili] (www.bilibili.com/video/BV12j…) image.png 求阶乘和 可以用两个循环,相乘,相乘和给一个变量,再用一个变量累加相乘和

	ll sub = 1;
	ll sum = 0;
	for (int i = 1; i < 40; i++) {
		for (int j = 1; j < i; j++) {
			sub = i * j;
		}
		sum += sub;
		cout << sub << endl;
	}
}

image.png

错了错了,是这样的:


//	ll sub = 1;
	ll sum = 0;
	for (int i = 1; i < 40; i++) {
		ll sub = 1;
		for (int j = 1; j < i; j++) {
			sub = sub * j;
		}
		sum += sub;
		cout << sum << endl;
	}

image.png 出现负数可能是爆内存了,把i的范围改为i<20:

image.png

观察运行结果,我们可以发现规律,越往后数字后面的数值基本上都是一样的,都是313

数学方法

因为很多位都是相同的,我们可以用头模定理

image.png

image.png

答案:420940313