对3 5 7 取不同模的结果

2019-04-13 21:17发布

题目: 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~500101 101+105=206   206+105=311 311+105=416 共有101 206 311416 四个数; 我们是不是可以这样推理:三个互质的数是这样的 #include #include #include 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:"<>t; while(t--) { cout<<"输入三个模:"<>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<