蓝桥杯 第十五届 研究生组 B题 召唤数学精灵

问题描述:

数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。累加法仪式 A(n) 是将从 1 到 n 的所有数字进行累加求和,即:A(n)=1+2+⋯+n累乘法仪式 B(n) 则是将从 1 到 n 的所有数字进行累乘求积,即:B(n)=1×2×⋯×n据说,当某个数字 i 满足 A(i)−B(i) 能被 100 整除时,数学精灵就会被召唤出来。现在,请你寻找在 1 到 2024041331404202 之间有多少个数字 i,能够成功召唤出强大的数学精灵。

答案提交:

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

解题思路:

由于查找的数过多,所以一定不是使用的for循环来解题,而是从中查找规律,所以先遍历前1000个数字,发现除前两个符合要求的数字,其余的数字%200都应该是0、24、175、199,所以可以直接计算出2024041331404202中一共有多少个200的组,并且判断2024041331404202%200的数字应该处于哪个区间(以0、24、175、199来划分区间),最终就可以得到可以召唤数学精灵的个数。

注意:

①可以召唤精灵的个数应该为long long类型,其超出了int型可以表示的范围;

②第一个200的组,其有5个符合要求的数字,所以最后应该要+1。

代码:

找规律代码:

cpp 复制代码
//找规律
int A = 0, B = 1;    //记录A(i)%100和B(i)%100
cout << "i" << '\t' << "A" << '\t' << "B" << '\t' << "number" << endl;
for (int i = 1;i < 1000;i++)
{
	A = (A + i) % 100;
	B = (B * i) % 100;	if (A == B)   //为想要的i
	{
		number++;
		cout << i << '\t' << A << '\t' << B << '\t' << number << endl;
	}
}

规律输出:

cpp 复制代码
i       A       B       number
1       1       1       1
3       6       6       2
24      0       0       3
175     0       0       4
199     0       0       5
200     0       0       6
224     0       0       7
375     0       0       8
399     0       0       9
400     0       0       10
424     0       0       11
575     0       0       12
599     0       0       13
600     0       0       14
624     0       0       15
775     0       0       16
799     0       0       17
800     0       0       18
824     0       0       19
975     0       0       20
999     0       0       21

main函数:

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	请在此输入您的代码
	long long number = 0;    //记录i的个数
	number = 2024041331404202 / 200 * 4 + 1;    //可以被200整除的部分,其中+1是指前199个数中,有1、3、24、175、199五个符合要求的数字,比后面每200个多一个,所以要+1
	int left = 2024041331404202 % 200;
	if (left < 24)
	{
		number++;
	}
	else if (left < 175)
	{
		number += 2;
	}
	else if (left < 199)
	{
		number += 3;
	}
	else
	{
		number += 4;
	}
	cout << number;

	return 0;
}

运行结果:

cpp 复制代码
40480826628086
相关推荐
技术猿188702783518 分钟前
阿里巴巴1688 API接口深度解析:商品详情获取与按图搜索商品(拍立淘)实用指南
算法·图搜索算法
羑悻的小杀马特14 分钟前
【Artificial Intelligence篇】AI 入侵家庭:解锁智能生活的魔法密码,开启居家梦幻新体验
c++·人工智能·生活
钢铁小狗侠17 分钟前
设计模式(5)——观察者模式
c++·观察者模式·设计模式
L~river19 分钟前
SQL刷题快速入门(二)
数据库·sql·mysql·算法·笔试·刷题
花里胡哨的菜只因21 分钟前
关于在windows系统中编译ffmpeg并导入到自己项目中这件事
c++·windows·ffmpeg
廖显东-ShirDon 讲编程31 分钟前
《零基础Go语言算法实战》【题目 2-3】函数错误排查
算法·程序员·go语言·web编程·go web
我想学LINUX33 分钟前
【2024年华为OD机试】 (A卷,100分)- 对称美学(Java & JS & Python&C/C++)
java·c语言·javascript·c++·python·华为od
每天敲200行代码40 分钟前
Linux开发工具--vim编辑器-gcc/g++编译器-gdb调试器
linux·c++·编辑器·vim·gdb
闻缺陷则喜何志丹1 小时前
【C++图论 BFS】1129. 颜色交替的最短路径|1779
c++·力扣·图论·最短路·宽度优先·颜色·交替
羊小猪~~1 小时前
数据结构C语言描述11(图文结合)--二叉搜索树(BST树)的实现(数据采用KV存储形式进行封装)
c语言·开发语言·数据结构·c++·学习·考研·算法