对3 5 7 取不同模的结果

来源:互联网 发布:同花顺金融数据录入 编辑:程序博客网 时间:2024/06/05 00:22

题目:

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;    }}

原创粉丝点击