题目:
x%3==2,x%5==1,x%7==3;
满足题意的最小x的值:
那么首先
将3*5*7=105;
即他们之间的最小公倍数;
(3*5*7)/3=35;即满足条件最小值中可以把3取模为2的质因数之一是:35
但是它要满足有个前提条件:
35%3==2判断它符不符合是三个数中能够对3取模是2;
同理:
(3*5**7)/5=21;
21%5==1;即满足条件最小值中可以把5取模为1的质因数之一是:21
(3*5*7)/7=15;
15%7==1;发现结果不是我们想要的3;所以我们在两边同时乘上一个3即可;
(15*3)%7==1*3;所以满足把7取模为3的质因数之一是45;
所以三个数综合一下:35+21+45=101既是满足题目的最小值;
那么,我们可以把题目扩展一下;
问:1-1000之间的数满足条件的有哪些?
那么,我们不难发现满足条件最小的那个数+最小公倍数=第二个满足条件的数;
依次加下去就可以;
这里我列举1~500;
101 101+105=206 206+105=311 311+105=416
共有101 206 311416 四个数;
我们是不是可以这样推理:三个互质的数是这样的
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int check(int vl,int mo,int mvl)
{
if(vl%mo==mvl)
return vl;
return vl*mvl;
}
int main()
{
int t,a,b,c;//分别表示:对3 5 7取模后的余数;
cout<<"input you want to test numbers:"<<endl;
cin>>t;
while(t--)
{
cout<<"输入三个模:"<<endl;
cin>>a>>b>>c;
int ming=3*5*7;
int num1=check(ming/3,3,a);
int num2=check(ming/5,5,b);
int num3=check(ming/7,7,c);
int minv=num1+num2+num3;
cout<<minv<<endl;
}
}