标题:新手求助:小学数学
只看楼主
greenpop
Rank: 1
等 级:新手上路
帖 子:73
专家分:3
注 册:2011-12-22
结帖率:88.24%
已结贴  问题点数:20 回复次数:2 
新手求助:小学数学
一个数被2除余1;
        3除余2;
        4除余3;
        5除余4;
        6除余5;
        7除余6;
        8除余7;
        9除余8;
        10除余9;
求最小的符合以上条件的数。
谢谢各位老师。


搜索更多相关主题的帖子: 数学 一个数 最小 条件 老师 
2019-05-07 22:05
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
得分:10 
#include “stdio.h”
int main()
{
int i;
for(i=0;i<10000;i++)
if(i%2==1&&i%3==2&&i%4==3...........)
printf(“%d\t”,i);

return 0
}
2019-05-08 08:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
确实是小学奥数题,可以使用《孙子算经》中的“中国余数定理”。

先写个劣质的暴力搜索来获得正确答案
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n = 1;
    for( ; ; ++n )
    {
        if( n% 2 != 1 ) continue;
        if( n% 3 != 2 ) continue;
        if( n% 4 != 3 ) continue;
        if( n% 5 != 4 ) continue;
        if( n% 6 != 5 ) continue;
        if( n% 7 != 6 ) continue;
        if( n% 8 != 7 ) continue;
        if( n% 9 != 8 ) continue;
        if( n%10 != 9 ) continue;
        break;
    }
    printf( "%u\n", n );
}
输出 2519

“中国余数定理”有点儿复杂,但具体到你这一题,因为 除数 和 余数 的差相同,都是1,那么直接用通项公式:
最小公倍数(2,3,4,5,6,7,8,9,10)*n - 差(也就是1)
程序代码:
#include <stdio.h>

unsigned std_gcd( unsigned a, unsigned b )
{
    for( ; b!=0; )
    {
        unsigned t = a;
        a = b;
        b = t%b;
    }
    return a;
}
unsigned std_lcm( unsigned a, unsigned b )
{
    return (a==0&&b==0) ? 0 : a/std_gcd(a,b)*b;
}

int main( void )
{
    unsigned lcm = 1;
    for( unsigned i=2; i<=10; ++i )
        lcm = std_lcm( lcm, i );
    printf( "%u\n", lcm-1 );
}
输出 2519
2019-05-08 09:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494602-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.861510 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved