欧拉计划第五题答案&代码&注释

0e21457260784fd7bea5702c66306bda.jpeg

 欸嘿 又是我,今天我们来讲解一下欧拉计划的第五题捏。

题目如下:

97f2c1570ab6439f9f78b9d9259ed530.png

 哇塞 这么简单的题要是出现在期末考试中就太好了!

直接for循环遍历!

#include <stdio.h>
int main()
{
	long a=1,b=2520;           //因为2520是1-10的整除数 所以避免过多运算 b从2520开始 
	while(a<=20)               //a从1-20 用b判断是否能被a整除 
	{
		if(b%a==0)
		{
			a++;
		}
		else                  //a重置 b增值 
		{
			b++;
			a=1;
		}
	}
	printf("%ld",b);
}

但是,这样做的话,如果最终数字很大,无疑会有很长的运算时间。

此程序的代码只有十多行,但运算时间超过了1秒,运行时会有肉眼可见的停顿。

即使我是一名小白程序员,没有学过算法和数据结构,但是练题不是直接上手的,是需要思考的。

我们现在就来思考一下一个简单的算法。

能被1-20整除的最小数,也就是它是1-20的最小公倍数。

我们可以用一个数组存储1-20 然后查找最小公倍数。

一个非常简单的方法就是: a与b的最小公倍数  =  a*b  /  a与b的最大公约数

我们的问题又变成了如何寻找最大公约数。

如果要寻找a和b的最大公约数 很简单的方法就是比较a和b的大小 找出较小的值

然后从较小值开始不断递减到1结束,其中第一次找出的能被a和b同时整除的数为最大公约数。

//我们写一个函数来求最大公约数
int Maxdiv(int a,int b)
{
    int i; //循环变量
    int min;//a和b中的更小值

    (a<b)? min=a : min=b;
    
    for (i = min;i>0;i--)
    {
        if ( a%i==0 && b%i==0 )
        {
            return i; //当i能被a和b整除时返回
        }
    }
}

最大公约数的函数已经实现了,我们可以着手做题了。

#include <stdio.h>

int Maxdiv(int a,int b);//函数声明

int main(void)
{
    int arr[20];
    int i;//循环变量
    long long num; //两个数相乘也许会溢出 写成longlong

    for (i=0; i<20; i++)
    {
        arr[i]=i+1;  //将1-20放入数组中
    }
        
    num = 1;
    for (i=1; i<20; i++)
    {
      
        num = num*arr[i] / Maxdiv(num,arr[i]);
        //找出最大公约数 用公式求出最小公倍数 用最小公倍数和下一个数再找最大公约数
    }
    printf("%lld\n", num);
    return 0;
}



//我们写一个函数来求最大公约数
int Maxdiv(int a,int b)
{
    int i; //循环变量
    int min;//a和b中的更小值

    (a<b)? min=a : min=b;
    
    for (i = min;i>0;i--)
    {
        if ( a%i==0 && b%i==0 )
        {
            return i; //当i能被a和b整除时返回
        }
    }
}

答案:232792560

希望大家能多多点赞,感谢支持!

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值