IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 任意个数的最小公倍数 和的平方与平方的和之间的差值_Java每日练习题及题解(11月17日) -> 正文阅读

[数据结构与算法]任意个数的最小公倍数 和的平方与平方的和之间的差值_Java每日练习题及题解(11月17日)

《Java每日练习题及题解》系列目录

1.有限条件求和_Java每日练习题及题解(11月15日)
2.最大质因数 最大回文数乘积 字符串String类用法_Java每日练习题及题解(11月16日)
3.任意个数的最小公倍数 和的平方与平方的和之间的差值_Java每日练习题及题解(11月17日)

先不断练习,然后不断总结。 绳锯木断,水滴石穿。

题目一:最小公倍数

一、题干

2520是可以被从1到10所有自然数整除的最小的数,即为从1到10的自然数的最小公倍数,求从120所有自然数的最小公倍数。

二、输出样例

232792560

三、解题思路

首先确定所需数据类型,本题数据较大,考虑用long类型或者BigInterger类(可参考BigInterger类)来实现。
思路:从两个数最大公约数推出两个数的最小公倍数

解题前所需要知道的数学原理
求最大公约数

辗转相除法: gcd(a,b) = gcd(b,a mod b)。
假如,需要求 1997 和 615 两个正整数的最大公约数,用辗转相除法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

求最小公倍数

方法:求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。
例如,求 [18,20],即得 [18,20]=18×20÷(18,20)=18×20÷2=180。

所以!
求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。
最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。

四、实现代码一(long类型)

//求最大公约数
    public static long gcd(long a,long b){
        return b==0?a:gcd(b,a%b);
    }
//求最小公倍数
    public static long lcm(long a,long b){
        return a*b/gcd(a,b);
    }
//主函数
    public static void main(String[] args) {
        long res=1L,i=1L;
        while(i<20){
            ++i;
            res=lcm(res,i);
        }
        System.out.println(res);
    }

五、实现代码二(采用BigInteger类)

public class p005 {
 private static BigInteger lcm(BigInteger x, BigInteger y) {
        return x.divide(x.gcd(y)).multiply(y);
    }
    public String run() {
        BigInteger allLcm = BigInteger.ONE;
        for (int i = 1; i <= 20; i++)
            allLcm = lcm(BigInteger.valueOf(i), allLcm);
        return allLcm.toString();
    }
    public static void main(String[] args) {
        System.out.println(new p005().run()); //232792560
    }
 }
 }

题目二:和的平方与平方的和之间的差值

一、题干

前十个自然数的平方的和为: 12+22+32+?+102=385
而前十个自然数和的平方为:(1+2+3+?+10)2 =55 2=3025
两者的差为3025?385=2640
求前一百个自然数的和的平方与平方的和之间的差值。

二、输出样例

25164150

三、解题思路

思路一:分别求平方和,和的平方。
思路二:推导公式

N 个数的和 sum1 = N(N + 1) / 2.
N 个数的平方和 sum2 = N(N + 1)(2N + 1) / 6
sum12 - sum2 = (N4 / 4) + (N3 / 6) - (N2 / 4) - (N / 6)
= N(N?1)(N+1)(3N+2)/12

四、实现代码一

public class ex6 {
//求前n个自然数的平方的和
    public static long SumOfSquare(int n){
        long res=0;
        while(n>0){
            res+=n*n;
            n--;
        }
        return res;
    }
//求前n个自然数和的平方
    public static long SquareOfSum(int n){
        long res=0,sum=0;
        while(n>0){
            sum+=n;
            n--;
        }
        return sum*sum;
    }
    public static void main(String[] args) {
        int n=100;
        System.out.println(SquareOfSum(n)-SumOfSquare(n));
    }
}

五、实现代码二

public class p006 {
    private static final int N = 100;
    public String run() {
        int sum1 = 0; //和
        int sum2 = 0; //平方和
        for (int i = 1; i <= N; i++) {
            sum1 += i;
            sum2 += i * i;
        }
        return Integer.toString(sum1 * sum1 - sum2);
    }
    public String run2() {
// int s =(N*N*N*N / 4) + (N*N*N / 6) - (N*N / 4) - (N / 6);
        int s =N*(N-1)*(N+1)*(3*N+2)/12;
        return Integer.toString(s);
    }
    public static void main(String[] args) {
        System.out.println(new p006().run2()); //25164150
    } 
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:38:52  更:2021-11-20 18:39:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/26 14:25:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码