1.召喚數學精靈 - 藍橋云課
問題描述
數學家們發現了兩種用于召喚強大的數學精靈的儀式,這兩種儀式分別被稱為累加法儀式?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,能夠成功召喚出強大的數學精靈。
答案提交
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e4;
ll n = 2023041331404202;
ll ad[N],chen[N],ans = 0;
int main(void)
{ll a = 0,b = 1;for(ll i = 1 ; i <= 1000 ; i++){a =(a+i)%100;b =(b*i)%100;ll t = (b - a) % 100;if(t % 100 == 0) cout<<i<<endl; }return 0;
}
我們可以發現,從200以后開始,每200個數字都會出現4次。1~200的數字出現6次,不滿足周期。所以我們要減去前200的數字。注意,這里是劃分數字,減去200不是縮小范圍
-
為何減去200?:這是將總范圍分割為前200和后續部分,確保前200個被單獨處理,而后續部分應用周期性規律。減法僅用于計算剩余數字的數量,不會減少實際范圍。
-
是否遺漏前200的解?:不會,前200的解已單獨計算并加到總結果中。后續的周期性計算僅針對201到N的部分。
所以答案就是(2024041331404202 / 200)*4 + 6
代碼:
#include <iostream>
using namespace std;
int main()
{cout << ll(2024041331404202 / 200)*4 + 6;return 0;
}