想一个1到100之间的数,分别除以357得到3个余数,把这三个余数输入计算机,计算机会猜出你想的数
2017-06-19 11:11
253 查看
/**想一个1到100之间的数,分别除以357得到3个余数,把这三个余数输入计算机,计算机会猜出你想的数*/ #include<iostream> using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; int d=70*a+21*b+15*c; while(d>105){ d=d-105; } cout<<d; }
解释:
a,b,c是d除以3,5,7分别的余数
d=3l+a=5m+b=7n+c
d=(3l/a+1)a=(5m/b+1)b=(7n/c+1)c
用x,y,z替换上面括号里面的分式
d=(3x+1)a=(5y+1)b=(7z+1)c
可以看到(3x+1)a是一个除以3余1的数,(5y+1)b是一个除以5余1的数,(7z+1)c是一个除以7余1的数
已知s=u+3v+3w,s%3=u%3,若s=cu+3v+3w,c是3k+1时,也就是c是除以3余1的数,s%3=u%3也是成立的
所以另d=(3x+1)a+(5y+1)b+(7z+1)c
所以b,c的系数应该被3整除,才能保证d除以3的余数与a相同
ac的系数应该被5整除,才能保证d除以5的余数与b相同
ab的系数能被7整除,才能保证d除以7的余数与c相同
所以a的系数应该是被5,7整除并且除以3余1的最小的数,是70
b的系数应该是被3,7整除并且除以5余1的最小的数,是21
c的系数应该是被3,5整除并且除以7余1的最小的数,是15
所以有了这一句
int d=70*a+21*b+15*c;
但是这样算的结果可能超过105,就是3,5,7的最小公倍数
所以要减去105才能保证在1到100之间
相关文章推荐
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 4.输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整
- 输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“
- 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1、操作数为
- 随机生成一个1~100之间的整数,玩家可以通过函数InputBox命令输入数字来猜测那未知的随机数字
- 2. 编写一个Java应用程序,用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、32
- 输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“
- 获取系统当前时间,完成格式化,得到一个字符串。例如”201608130743”(指年月日时分)。再随机取3个小于10的整数,分别插入到 字符串的年、月、日后面,完成输出。
- 华为机试题:输入两个超长整型构成的字符串,其间使用一个空格分隔,每个字符串最大长度为100个字符。求第一个整数除以第二个整数以后的余数。。
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都
- c语言同余定理的应用:三个大数除以m得到相同的余数,求m最大的数值
- 猜数:首先生成一个介于1-100之间的整数,从键盘不断输入数值直到该数值与生成的那个数相符为止,并打印出猜数的次数。
- 输入一个整数,如果该整数大于1000,则输出“big”,如果该整数介于100到1000之间(包含两个边界),则输出“middle”,如果上面两种情况都不满足,输出”small“
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 输入任意一个数,得到1到这个数之间的1的个数
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数, 并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同, 例如12121、3
- 计算一个1-100之间所有不能被3整除的和正好大于或者等于2000,看看对不?
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数