欧拉计划 第5题

题目

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

找出最小的能被1-20中每个数整除的数。

2520是最小的能被1-10中每个数字整除的正整数。

最小的能被1-20中每个数整除的正整数是多少?

解答:这题比较可以使用穷举法,不过时间比较长,时间大概3s左右。

也可以使用辗转相除法来求两数最大公约数。最小公倍数则由这个公式来求:
GCD * LCM = 两数乘积,其中GCD是两数最大公约数,LCM是两数最小公倍数。这种方法时间不到1s;

穷举法Java程序

public class N_5 {
	public static int nlcm(int n) {
		int number = n;
		while (true) {
			boolean flag = true;
			for (int i = n/ 2+1; i <= n; i++) {
				if (number % i != 0) {
					flag = false;
					break;
				}
			}
			if(flag)
				break;
			number++;
		}
		return number;
	}

	public static void main(String[] args) {
		System.out.println(nlcm(20));
	}
}
运行结果:232792560

辗转相除法
public class N_5 {
	public static long gcd(long a ,long b)//求任意两个整数的公约数
	{
		if(a<b)
		{
			a = a + b;
			b = a - b;
			a = a - b;
		}
		long c;
		while(b!=0)
		{
			c = a%b;
			a = b;
			b = c;
		}
		return a;
	}
	public static long lcm(long a,long b)//求任意两个整数的最小公倍数
	{
		return a*b/gcd(a,b);
	}
	public static long nlcm(long n)//求小于n的正整数数最小公倍数
	{
		if(n==0)
			return 1;
		return lcm(nlcm(n-1),n);
	}
	public static void main(String []args)
	{
		System.out.println(nlcm(20));
	}
}

运行结果:232792560
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以帮你解答这个问。 假设我们要解决一个一阶微分方程: y' = f(x,y) 其,y(x0) = y0 是已知初始条件。 欧拉方法是一种基本的数值解法,它将微分方程转化为离散形式,然后通过迭代求解来得到数值解。 具体步骤如下: 1. 确定求解区间 [x0, xn],步长 h。 2. 初始化 y(x0) = y0。 3. 通过欧拉公式进行迭代计算: y(i+1) = y(i) + h*f(xi, yi) 其,xi = x0 + i*h,yi = y(xi)。 4. 循环迭代直到 xi = xn。 MATLAB代码实现如下: ```matlab function [x,y] = euler(f,x0,y0,xn,h) x = x0:h:xn; n = length(x); y = zeros(1,n); y(1) = y0; for i = 1:n-1 y(i+1) = y(i) + h*f(x(i),y(i)); end end ``` 其,f 是一个函数句柄,表示微分方程 y' = f(x,y) 的 f(x,y)。 例如,要求解 y' = x + y,y(0) = 1 在 [0,1] 区间内的数值解,可以这样调用: ```matlab f = @(x,y) x + y; [x,y] = euler(f,0,1,1,0.1); ``` 这样,就可以得到在步长为 0.1 时的数值解。 ### 回答2: 欧拉公式是一种常微分方程的数值解方法,在MATLAB可以使用该方法求解微分方程的数值解。 首先,需要定义微分方程的函数表达式。假设要求解的微分方程为dy/dx = f(x, y),其f(x, y)为与x和y相关的函数。在MATLAB,可以使用function关键字定义此函数。 接下来,需要确定微分方程的初值条件。假设初始条件为x0和y(x0)。这些值可以在代码进行定义。 然后,可以使用欧拉公式进行数值解的计算。欧拉公式的迭代公式为y(i+1) = y(i) + h*f(x(i), y(i)),其h为步长,x(i)为当前的自变量值,y(i)为当前的函数值。在MATLAB,可以使用for循环结构来实现迭代计算。 在每次迭代,需要更新x的值,即x(i+1) = x(i) + h。同时,需要通过函数f计算当前的函数值f(x(i), y(i))。最后,计算新的y值,即y(i+1) = y(i) + h*f(x(i), y(i))。 迭代计算可以进行多个步骤,直到达到所需的准确度或达到所需的自变量范围。 最后,可以通过绘图等方式将数值解可视化。可以使用plot函数绘制函数曲线,以及使用hold on和hold off命令来绘制多个曲线。 总之,MATLAB欧拉公式求解常微分方程的数值解是一个简单且常用的方法。需要根据具体问定义微分方程的函数表达式和初始条件,并使用for循环结构和迭代公式进行计算,最后可通过绘图等方式将数值解可视化。 ### 回答3: 欧拉公式是一种基本的数值解常微分方程的方法。它基于微分方程两边的导数定义,通过将微分方程转化为差分方程的形式来近似求解。 在MATLAB使用欧拉方法求解微分方程的数值解的步骤如下: 1. 定义微分方程的初始条件和求解的区间范围。 2. 给定步长h,将求解区间划分为若干个等距的小区间。 3. 初始化数值解的数组,例如y,将初始条件赋值给第一个元素。 4. 使用欧拉公式进行迭代计算: - 计算当前置的斜率,即将当前置和数值解代入微分方程求导数。 - 根据斜率和步长h,计算下一个置的数值解。 - 将新的数值解添加到数组。 5. 重复步骤4直到求解区间的末尾。 6. 最后,返回求解区间内所有置的数值解数组。 以下是一个使用欧拉方法求解一阶常微分方程的MATLAB示例代码: ``` function y = euler_method(f, y0, h, t_start, t_end) % 定义步长和求解区间 t = t_start:h:t_end; n = length(t); % 初始化数值解数组 y = zeros(1, n); y(1) = y0; % 欧拉方法迭代计算 for i = 2:n y(i) = y(i-1) + h * f(t(i-1), y(i-1)); end end ``` 其,f是微分方程的函数表达式,y0是初始条件,h是步长,t_start和t_end是求解区间的起始和结束置。 通过调用上述函数,可以得到在求解区间范围内微分方程的数值解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值