对3 5 7 取不同模的结果

题目:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值