大整数相乘(分治)

简介: 参考了(感谢):http://blog.csdn.net/jeffleo/article/details/53446095继续变换:XY=AC2^n+[(A-B)(D-C)+AC+BD]2^n/2+BD把原来的A...

参考了(感谢):http://blog.csdn.net/jeffleo/article/details/53446095

这里写图片描述

继续变换:XY=AC2^n+[(A-B)(D-C)+AC+BD]2^n/2+BD

把原来的AC、AD、BC、BD四个乘法转化成了AC、(A-B)(D-C)、BD三个乘法

时间复杂度从O(n^2)变成O(n^1.59 )


import java.util.Scanner;

import static java.lang.Math.pow;

public class Main {
    public static int flag(int x) {
        x = (x > 0)? 1:-1;
        return x;
    }
    public static int multiply(int x, int y, int n) {
        int flag = flag(x)*flag(y);
        x = Math.abs(x);
        y = Math.abs(y);
        if (x == 0 || y == 0) {
            return 0;
        } else if (n == 1) {
            return flag * x * y;
        } else {
            //分割计算
            int A = x / (int) pow(10, n/2);
            int B = (int) (x - A*(pow(10, n / 2)));
            int C = (int) (y / pow(10, n / 2));
            int D = (int) (y - C*(pow(10, n / 2)));
            //分治计算
            int AC = multiply(A, C, n / 2);
            int BD = multiply(B, D, n / 2);
            int ABDC = multiply((A - B), (D - C), n / 2) + AC + BD;
            return (int) (flag*(AC*pow(10, n) + ABDC * pow(10, (n/2)) + BD));
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int n = sc.nextInt();
        System.out.println(multiply(x,y,n));
        System.out.println(x*y);
        sc.close();
    }
}
目录
相关文章
|
存储 人工智能 算法
秒懂算法 | 矩阵连乘问题
给定n个矩阵{A1,A2,A3,…,An},其中Ai与Ai+1(i=1,2,3,…,n-1)是可乘的。用加括号的方法表示矩阵连乘的次序,不同加括号的方法所对应的计算次序是不同的。
1049 0
秒懂算法 | 矩阵连乘问题
|
算法 安全 Java
z3-solver求解器
一个非常高级的工具,SMT求解器。应用领域非常广,解各类方程,解各类编程问题(例如解数独),解逻辑题等都不在话下。
|
11月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
1921 1
|
JSON Dart 测试技术
Flutter中高级JSON处理:使用json_serializable进行深入定制
Flutter中高级JSON处理:使用json_serializable进行深入定制
1945 3
|
存储 SQL 人工智能
探索实践分享:基于LangChain构建大语言模型“套壳”应用
缘起近半年来AI非常火爆,我们深刻地体会到GPT类产品已经切实地在改变我们的生活和工作方式。我也比较关注AI相关的开源技术,最近看到了两个开源库给了我非常大的灵感:1. LangChain:这个库把AI开发中可能会用到的相关技术都抽象成一个个小的模块,很多工具函数都开箱即用。官网里的一个向量数据库使用的例子给我留下了深刻的印象:从本地文件的读取、文本内容的拆分、向量的存储到相似向量的检索**, 这
15322 8
探索实践分享:基于LangChain构建大语言模型“套壳”应用
|
监控 安全 网络安全
远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制
远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制
4694 0
|
机器学习/深度学习 算法
机器学习课后题——贝叶斯
机器学习课后题——贝叶斯
717 0
机器学习课后题——贝叶斯
|
监控 NoSQL MongoDB
MongoDB全文检索: 助力快速精准的文本搜索
MongoDB全文检索: 助力快速精准的文本搜索
779 0
|
编解码 安全 数据安全/隐私保护
速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk
远程办公是指通过现代互联网技术,实现非本地办公:在家办公、异地办公、移动办公等远程办公模式。多数通过第三方远程控制软件来实现,例如通过远程手机/电脑远程控制办公设备进行工作或者会议,实现远程办公的目的。
1651 0
速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk
|
人工智能 搜索推荐 物联网
web1.0 和 web2.0 以及 web3.0的发展史
web1.0 和 web2.0 以及 web3.0的发展史
1744 0