有趣的数字计算~~~#includevoid main(){ int a; if(a/2==1&&a/3==2&&a/4==3&&a/5==4&&a/6==5&&a/7==6&&a/8==7&&a/9==8) printf("%d\n",a);}为什么结果出错,难道是数字太大,超出范围~~~~~a这个数除2余1,除3余2,除4余3……除9余8

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 06:37:50

有趣的数字计算~~~#includevoid main(){ int a; if(a/2==1&&a/3==2&&a/4==3&&a/5==4&&a/6==5&&a/7==6&&a/8==7&&a/9==8) printf("%d\n",a);}为什么结果出错,难道是数字太大,超出范围~~~~~a这个数除2余1,除3余2,除4余3……除9余8
有趣的数字计算~~~
#include
void main()
{
int a;
if(a/2==1&&a/3==2&&a/4==3&&a/5==4&&a/6==5&&a/7==6&&a/8==7&&a/9==8)
printf("%d\n",a);
}
为什么结果出错,难道是数字太大,超出范围~~~~~
a这个数除2余1,除3余2,除4余3……除9余8
就是这个数,让把a给算出来

有趣的数字计算~~~#includevoid main(){ int a; if(a/2==1&&a/3==2&&a/4==3&&a/5==4&&a/6==5&&a/7==6&&a/8==7&&a/9==8) printf("%d\n",a);}为什么结果出错,难道是数字太大,超出范围~~~~~a这个数除2余1,除3余2,除4余3……除9余8
下面稍微说说怎么解模方程组
由于mod的数不一定互质,所以必须从定义出发,下面给出思路:
解n个方程组是通过合并n-1次来解.合并过程如下:
x=c1(mod b1)
x=c2(mod b2)
于是我们可以根据定义写成:
x=k1b1+c1
x=k2b2+c2 (1)
so:k1b1+c1=k2b2+c2
so:k2b2-k1b1=c1-c2 (2)
so:k2b2 = c1-c2 (mod b1)
这里b2,c1,c2,b1 都知道,那么显然我们可以通过扩展欧奇里得来求解k2,由于k2必须存在,所以如果找不出k2,那么显然方程合并不了,即方程无解
下面得到k2(mod b1')以后回代(2) (2边可以同时除上gcd(b1,b2),模方程在(c1-c2)=0(mod (b1,b2))的情况下才有解,所以才可以除)
下面b1'=b1/gcd(b1,b2),b2'=b2/gcd(b1,b2),C'=(c1-c2)/gcd(b1,b2)
k2b2'=C' (mod b1')
于是可以得到
k2 (mod b1')=k2(mod b1*b2/gcd(b1,b2))
k2=(c1-c2+k1*b1)/b2 (2)
假设算出来k2 = k3(mod b1')
那么k2=k3+k4*b1'
代入x=k2b2+c2 (1)
x=k3*b2+k4*b2*b1'+c2
so:
x=k3*b2+c2(mod b2*b1')=k3*b2+c2(mod b1*b2/gcd(b1,b2));
按照上面的做法,可以得到通解 :
x = 2519(mod 2520),
所以开始的若干个解为:
2519,5039,...既x = 2519 + k*2520 (k>=0)
这是典型的求解模方程组的数论题目.