#include<bits/stdc++.h>
using namespace std;
int mod[50]={0,0,1,2,1,4,5,4,1,2,9,0,5,10,11,14,9,0,11,18,9,11,11,15,17,9,23,20,25,16,29,27,25,11,17,4,29,22,37,23,9,1,11,11,33,29,15,5,41,46};
int main()
{
long long a=1;//根据2的取余结果设置初始值
long long k =2;//初始步长为2
//除以2余1的有1 3 5 所以步长初始为2
for(long long i=1;i<50;i++)
{
while(1){
if(a%i==mod[i]) //a为满足当前取余计算的数
{
k=k/__gcd(k,i)*i;//求最小公倍数
//使步长既满足条件1又满足2,加2不满足第二个条件,加3不满足第一个,所以就加最小公倍数
break;
}
else a+=k;
//继续往后推,模3余2的数,加一个step不满足,再继续加到满足条件的数1 3不行,5可以
}
}
cout<<ans<<endl;
return 0;
}
//运算过程
b==0?a:__gcd(b,a%b)
//最大公因数,才知道要写下划线
(a/__gcd(a,b)*b
//最小公倍数
有对中国剩余定理感兴趣的友友们可以自己看看,我感觉前几个写的都是很详细的