100分求助,数学余数问题,急!!!

qingjin 2006-08-12 05:46:46
m能被a整除,m除以b余c,m, a, b, c都是正整数,求最小的m关于a, b, c的表达式
...全文
773 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxiaotian 2006-08-21
  • 打赏
  • 举报
回复
我的答案是:m = 1,a = 1, b = 2, c = 1;
indentify 2006-08-14
  • 打赏
  • 举报
回复
我在以下帖子已作了相同回复:
http://community.csdn.net/Expert/topic/4944/4944366.xml?temp=.5559351
----------------------------------------------------------------------------------
int foo(int a, int b, int c)
{
if(!(a % c))
//能整除就返回 0
{
return 0;
}

for(int i = c; i > 0; i--)
//不要用while(true)了,当N==C的时候不能整除,N再大也没用
{
if(!((a + (b * i)) % c))
//遇到合适的N马上返回
{
return i;
}
}

//设N==-1为找不到合适的数
return -1;
}
xgw001 2006-08-13
  • 打赏
  • 举报
回复
偶笨!弱弱的问一句:m=0,m++;和m=c,m+=b有什么区别?我会想从0开始啊,怕漏掉什么!
xgw001 2006-08-13
  • 打赏
  • 举报
回复
谢谢楼上的!什么公式可以证明啊?我真不是很清楚啊!
Dranix_j 2006-08-13
  • 打赏
  • 举报
回复
楼上的,不会漏掉什么的,那个有公式证明的
Amanbaiye 2006-08-12
  • 打赏
  • 举报
回复
求最小的m关于a, b, c的表达式??
看来a,b,c是未知数
tailzhou 2006-08-12
  • 打赏
  • 举报
回复
你的
while(true)
{
if( m % a == 0 && m % b == c ) break;
m += b;
}

==>

while(m % a) m += b;

也一样呀;
Dong 2006-08-12
  • 打赏
  • 举报
回复
给一个更严紧的,但难理解一点!不过代码好
#include <stdio.h>

int foo(int a, int b, int c)
{
for(int m=c; m%a; m+=b);
return m;
}
int main()
{
int a=7,b=3,c=2;
int m = foo(a,b,c);
printf("%d\n",m);
getchar();
return 0;
}
tailzhou 2006-08-12
  • 打赏
  • 举报
回复
3.a,b都不能被C整除,整个式子能被c整除。n处于1----c之间。n的范围还可以进一步缩小;

不管它这个命题成不成立,反正你要求n,在0到((b,c的最小公倍数)除b的商) 区间枚举得了.
tailzhou 2006-08-12
  • 打赏
  • 举报
回复
这么简单一个题,怎么搞出这么大的动静??

除非你能直接推导出求n的方程式(不用循环枚举),不然分出那么多情况有什么用.

for (n=0; n<c ;a+=b,++n) if (a%c==0) break;
//当n=0的时候,就相当于 判断a是否能被c整除了.

飞鸟的这个实际上有点问题:
1.a,b两者都能被c整除,则能整除。n=0
2.a,b其中之一能被c整除:若a能被整除,n =c/gcd(b,c);若b能被c整除,整个式子不能被整除
3.a,b都不能被C整除,整个式子能被c整除。n处于1----c之间。

应该是:
1.a能被c整除,则能整除。n=0;
2.a不能被c整除,b能被c整除,整个式子不能被整除;
3.a,b都不能被C整除,整个式子能被c整除。n处于1----c之间。n的范围还可以进一步缩小;
netxuning 2006-08-12
  • 打赏
  • 举报
回复
学习
庄鱼 2006-08-12
  • 打赏
  • 举报
回复
bool fun(int a,int b,int c,int &n)
{
a %= c;a = c-a;
b %=c;
for(n=0;n<c;++n)
if(a == b*n)
return true;
return false;
}
int main()
{
int n;
cout <<fun(1,2,2,n)<<" "<<n<<endl;
cout <<fun(7,5,3,n);
cout <<":"<<n<<endl;
return 0;
}
nxnh 2006-08-12
  • 打赏
  • 举报
回复
老大,那不是我的推导,我的推导在下边
qingjin 2006-08-12
  • 打赏
  • 举报
回复
多谢大家帮助,现在又有新问题了,在那个帖子里

“楼上crazy_lazy_pig
(a+b*n)(mod c)
= (a(mod c) + b*n(mod c))(mod c)
= (a(mod c) + b(mod c) * n(mod c))(mod c)

你的推导能不能在继续进行,在程序里b(mod c) * n(mod c)是个超过int的数,我想避免这种情况。

这个是我现在程序中遇到的关键地方,哪位高手帮忙继续推导,或者告诉我介绍该方面知识的网页也行。”
tailzhou 2006-08-12
  • 打赏
  • 举报
回复
你的a,b,c是已知的么??
nxnh 2006-08-12
  • 打赏
  • 举报
回复
楼主:我证出来了,证明帖在那个帖上.这个贴的分就给我加在中国同余那个解法上吧,那道题的分给飞鸟吧,他提出了关键的思路
will123 2006-08-12
  • 打赏
  • 举报
回复
学习.谢谢你们.
天涯倦客 2006-08-12
  • 打赏
  • 举报
回复
哈哈 楼上的都不怕 死循环....
少了 无解情况的 判定...
hqulyc 2006-08-12
  • 打赏
  • 举报
回复
int m = c;
while(true)
{
if( m % a == 0 ) break;
m += b;
}
return m;

or
int m = a;
while(true)
{
if( m % b == c ) break;
m += a;
}
return m;
qingjin 2006-08-12
  • 打赏
  • 举报
回复
实际上本题是
http://community.csdn.net/Expert/topic/4944/4944366.xml?temp=.3256189
这个问题的变形,我其实要问以上的问题,现在还没有正确解答,如果能帮我回答出该题,那么两道题200分送上。
加载更多回复(17)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧