精华内容
下载资源
问答
  • java中的数学乘法基础性问题 昨天做了一个gridView的Item,在Adapter中重写getView方法时设置获取图片的宽和高, 结果老是报错说宽和高必须大于哦0,但是我看了一下,wwitdh和hheight都是不为0的,怎么乘了1/3...

    java中的数学乘法基础性问题

    昨天做了一个gridView的Item,在Adapter中重写getView方法时设置获取图片的宽和高,


    结果老是报错说宽和高必须大于哦0,但是我看了一下,wwitdh和hheight都是不为0的,怎么乘了1/3后会为0呢?

    后来发现犯了一个java的基础性错误,1/3=0这是整数除法,改为1.0/4*hheight就好了。

    今天特意记下来,免得以后再犯这种基础性错误。

    展开全文
  • 想了解使用java写的矩阵乘法实例(Strassen算法)的相关内容吗,Jack_Weng在本文为您仔细讲解java矩阵乘法(Strassen算法)的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java矩阵乘法,java矩阵,两矩阵相乘...

    想了解使用java写的矩阵乘法实例(Strassen算法)的相关内容吗,Jack_Weng在本文为您仔细讲解java矩阵乘法(Strassen算法)的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java矩阵乘法,java矩阵,两矩阵相乘java代码,下面大家一起来学习吧。

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。

    原理

    Strassen算法的原理如下所示,使用sympy验证Strassen算法的正确性

    import sympy as s

    A = s.Symbol("A")

    B = s.Symbol("B")

    C = s.Symbol("C")

    D = s.Symbol("D")

    E = s.Symbol("E")

    F = s.Symbol("F")

    G = s.Symbol("G")

    H = s.Symbol("H")

    p1 = A * (F - H)

    p2 = (A + B) * H

    p3 = (C + D) * E

    p4 = D * (G - E)

    p5 = (A + D) * (E + H)

    p6 = (B - D) * (G + H)

    p7 = (A - C) * (E + F)

    print(A * E + B * G, (p5 + p4 - p2 + p6).simplify())

    print(A * F + B * H, (p1 + p2).simplify())

    print(C * E + D * G, (p3 + p4).simplify())

    print(C * F + D * H, (p1 + p5 - p3 - p7).simplify())

    复杂度分析

    $$f(N)=7\times f(\frac{N}{2})=7^2\times f(\frac{N}{4})=...=7^k\times f(\frac{N}{2^k})$$

    最终复杂度为$7^{log_2 N}=N^{log_2 7}$

    java矩阵乘法(Strassen算法)

    代码如下,可以看看数据结构的定义,时间换空间。

    public class Matrix {

    private final Matrix[] _matrixArray;

    private final int n;

    private int element;

    public Matrix(int n) {

    this.n = n;

    if (n != 1) {

    this._matrixArray = new Matrix[4];

    for (int i = 0; i < 4; i++) {

    this._matrixArray[i] = new Matrix(n / 2);

    }

    } else {

    this._matrixArray = null;

    }

    }

    private Matrix(int n, boolean needInit) {

    this.n = n;

    if (n != 1) {

    this._matrixArray = new Matrix[4];

    } else {

    this._matrixArray = null;

    }

    }

    public void set(int i, int j, int a) {

    if (n == 1) {

    element = a;

    } else {

    int size = n / 2;

    this._matrixArray[(i / size) * 2 + (j / size)].set(i % size, j % size, a);

    }

    }

    public Matrix multi(Matrix m) {

    Matrix result = null;

    if (n == 1) {

    result = new Matrix(1);

    result.set(0, 0, (element * m.element));

    } else {

    result = new Matrix(n, false);

    result._matrixArray[0] = P5(m).add(P4(m)).minus(P2(m)).add(P6(m));

    result._matrixArray[1] = P1(m).add(P2(m));

    result._matrixArray[2] = P3(m).add(P4(m));

    result._matrixArray[3] = P5(m).add(P1(m)).minus(P3(m)).minus(P7(m));

    }

    return result;

    }

    public Matrix add(Matrix m) {

    Matrix result = null;

    if (n == 1) {

    result = new Matrix(1);

    result.set(0, 0, (element + m.element));

    } else {

    result = new Matrix(n, false);

    result._matrixArray[0] = this._matrixArray[0].add(m._matrixArray[0]);

    result._matrixArray[1] = this._matrixArray[1].add(m._matrixArray[1]);

    result._matrixArray[2] = this._matrixArray[2].add(m._matrixArray[2]);

    result._matrixArray[3] = this._matrixArray[3].add(m._matrixArray[3]);;

    }

    return result;

    }

    public Matrix minus(Matrix m) {

    Matrix result = null;

    if (n == 1) {

    result = new Matrix(1);

    result.set(0, 0, (element - m.element));

    } else {

    result = new Matrix(n, false);

    result._matrixArray[0] = this._matrixArray[0].minus(m._matrixArray[0]);

    result._matrixArray[1] = this._matrixArray[1].minus(m._matrixArray[1]);

    result._matrixArray[2] = this._matrixArray[2].minus(m._matrixArray[2]);

    result._matrixArray[3] = this._matrixArray[3].minus(m._matrixArray[3]);;

    }

    return result;

    }

    protected Matrix P1(Matrix m) {

    return _matrixArray[0].multi(m._matrixArray[1]).minus(_matrixArray[0].multi(m._matrixArray[3]));

    }

    protected Matrix P2(Matrix m) {

    return _matrixArray[0].multi(m._matrixArray[3]).add(_matrixArray[1].multi(m._matrixArray[3]));

    }

    protected Matrix P3(Matrix m) {

    return _matrixArray[2].multi(m._matrixArray[0]).add(_matrixArray[3].multi(m._matrixArray[0]));

    }

    protected Matrix P4(Matrix m) {

    return _matrixArray[3].multi(m._matrixArray[2]).minus(_matrixArray[3].multi(m._matrixArray[0]));

    }

    protected Matrix P5(Matrix m) {

    return (_matrixArray[0].add(_matrixArray[3])).multi(m._matrixArray[0].add(m._matrixArray[3]));

    }

    protected Matrix P6(Matrix m) {

    return (_matrixArray[1].minus(_matrixArray[3])).multi(m._matrixArray[2].add(m._matrixArray[3]));

    }

    protected Matrix P7(Matrix m) {

    return (_matrixArray[0].minus(_matrixArray[2])).multi(m._matrixArray[0].add(m._matrixArray[1]));

    }

    public int get(int i, int j) {

    if (n == 1) {

    return element;

    } else {

    int size = n / 2;

    return this._matrixArray[(i / size) * 2 + (j / size)].get(i % size, j % size);

    }

    }

    public void display() {

    for (int i = 0; i < n; i++) {

    for (int j = 0; j < n; j++) {

    System.out.print(get(i, j));

    System.out.print(" ");

    }

    System.out.println();

    }

    }

    public static void main(String[] args) {

    Matrix m = new Matrix(2);

    Matrix n = new Matrix(2);

    m.set(0, 0, 1);

    m.set(0, 1, 3);

    m.set(1, 0, 5);

    m.set(1, 1, 7);

    n.set(0, 0, 8);

    n.set(0, 1, 4);

    n.set(1, 0, 6);

    n.set(1, 1, 2);

    Matrix res = m.multi(n);

    res.display();

    }

    }

    总结

    相关文章

    展开全文
  • (数学渣,下面的文字可能有误,欢迎指教)乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广。记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p)加减乘与模运算的顺序交换不会影响...

    (数学渣,下面的文字可能有误,欢迎指教)

    乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广。记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p)

    加减乘与模运算的顺序交换不会影响结果,但是除法不行。有的题目要求结果mod一个大质数,如果原本的结果中有除法,比如除以a,那就可以乘以a的逆元替代。

    在mod p的运算中,a存在乘法逆元当且仅当a与p互质。一般题目给的是一个大质数,所以只要a不是p的倍数,就以求乘法逆元。

    目前了解到的求法有三种:

    1.扩展欧几里得。aa^-1≡ 1(mod p),可以转换为aa^-1 + py = 1,即是扩展欧几里得所能解的ax + by = gcd(a, b)。最常用的解法。

    intx, y;int extgcd(int a, int b, int &x, int &y)

    {if (b == 0){

    x= 1;

    y= 0;returna;

    }int gcd = exgcd(b, a %b, x, y);int tmp =x;

    x=y;

    y= tmp - (a/b) *y;returngcd;

    }/*求解ax+by=gcd(a,b),亦即ax≡1(mod b)。函数返回值是a,b的最大公约数,而x即a的逆元。

    注意a, b不能写反了。*/

    2.由费马小定理a^(p-1)≡ 1(mod p)(p为素数),稍作变形即是 aa^(p-2)≡ 1(mod p),是不是发现了,a^(p-2)即是a的逆元,这个可以用快速幂来求。

    3.网上看到的一个很厉害的o(n)的递推,求前n个逆元,不知道是怎么推出来的,但是可以简单地证明一下正确性(要求所mod p为素数)。

    首先,1的逆元是1,没什么疑问。

    假设前i个数的逆元已经求出,那么

    i^-1 = (p%i)^-1 * (p - [p/i]) % p。其中[]表示去尾取整。

    (p%i)^-1其实就是(p-[p/i]i)^-1,然后我们左右乘以i,

    ii^-1 = (p-[p/i]i)^-1 * ((i-1)p + p-[p/i]i) % p,

    其实就是ii^-1 = k^-1 * ((i-1)p + k) % p = 0 + 1 = 1,这样就证完了=。=

    //字体真糟糕。。

    int[] inv = new int[MAXN];

    inv[1] = 1;for (int i = 2; i

    inv[i]= inv[MOD%i]*(MOD-MOD/i)%MOD;

    展开全文
  • java里面简单的 程序 数学 里面 乘法列表
  • Java—九九乘法

    2020-09-13 09:37:00
    java—九九乘法表 Problem Description 九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题。《九九乘法歌诀》,又常称为“小九九”,如下图所示。你的任务是写一个程序,对于给定的一个正整数 n ,输出...

    java—九九乘法表

    Problem Description
    九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题。《九九乘法歌诀》,又常称为“小九九”,如下图所示。你的任务是写一个程序,对于给定的一个正整数 n ,输出“九九乘法表”的前 n 行。例如,输入 n 为 9,你的程序的输出将为下图:
    在这里插入图片描述

    Input
    输入包含多组测试数据,以 EOF 结束。每组测试数据只包含一个正整数 n (0 < n < 10)。

    Output
    对于每组测试数据,输出上图所示“九九乘法表”的前 n 行。
    Sample Input
    2
    3
    Sample Output
    11=1
    1
    2=2 22=4
    1
    1=1
    12=2 22=4
    13=3 23=6 3*3=9
    Hint
    必须使用for循环,如果你的代码中出现例如

    if(n == 1) printf(“1*1=1\n”);

    if(n == 2) printf(“11=1\n12=2 2*2=4\n”);

    或其类似语句,本题不得分。

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner reader = new Scanner(System.in);
    		int i, n, j;
    		while (reader.hasNext()) {
    			n = reader.nextInt();
    			for (i = 1; i <= n; i++) {
    				for (j = 1; j <= i; j++) {
    					System.out.print(j + "*" + i + "=" + i * j);
    					if (j != i) {
    						System.out.print(" ");
    					}
    				}
    				System.out.println();
    			}
    		}
    	}
    
    }
    

    本题要注意输出格式:if (j != i) { System.out.print(" "); }

    展开全文
  • 537. 复数乘法 给定两个表示复数的字符串。 返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。 示例 1: 输入: “1+1i”, “1+1i” 输出: “0+2i” 解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它...
  • 它的工作原理与小学数学相似,因为你只需知道你的乘法表并记住任何时候零都是零 .让我拿1.5 * 3.0,单精度 .0x3FC00000 1.50x40400000 3.00x40900000 1.5 * 3.0 = 4.5扩大0x3FC000111111110000000 01111111 10000000...
  • 题目链接:HDU5047 M型分割平面,经过推导,公式为F(n)=8*n*n-7*n+1,如果...所以这里提供JAVA和C的两种ACcode C代码:代码参考自:http://blog.csdn.net/u012860063/article/details/39617811 /* 2017年9月20日14
  • 背景我是航空航天工程和EECS学生.我正处于大量数学和物理学的工作,但尚未进入...但是在我花时间这么做之前,我想知道我是否应该支持更多的加法运算,或者更多的乘法运算. (我已经知道分工的成本要高得多.)例 这是我...
  • 免费资源网 - https://freexyz.cn/Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下...
  • strassen算法于1969年由德国数学家strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理strassen算法的原理如下所示,使用sympy验证strassen算法的...
  • 乘法原理有 $n$ 组元素,第 $i$ 组有 $c_i$ 个元素,选一个元素,则方案数为 $\prod_{i=1}^n c_i$ 。排列把 1~n 这 $n$ 个数重新排列,方案数为 $n!$ 。在 1~n 这 $n$ 个数中选 $k$ 个数排成一排,方案数为 $P(n...
  • 九九乘法表_JAVA

    2020-09-27 11:13:32
    九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题。《九九乘法歌诀》,又常称为“小九九”,如下图所示。你的任务是写一个程序,对于给定的一个正整数 n ,输出“九九乘法表”的前 n 行。例如,输入 n ...
  • 循环语句的应用)数学中的矩阵运算比较常见,在java中,设计二维数组来表示矩阵。这个例子要求随即产生两个矩阵,并实现两个矩阵的加法和乘法。具体的java矩阵相加与相乘实现代码如下://每一行(Row)数据用空格隔开,...
  • 九九乘法表是我们小学在数学课上就学习过的知识。因为它是由两个个位数相乘得出的规律,且规律简单清楚。所以十分适合初学Java或者其他编程语言的新手来学习。其中的嵌套循环与输出字符都是十分经典的。 首先我先放...
  • Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下所示,使用sympy验证Strassen算法的...
  • Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下所示,使用sympy验证Strassen算法的...
  • Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下所示,使用sympy验证Strassen算法的...
  • Tom and permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 201 Accepted Submission(s): 87 Problem Description Tom has learn
  • 矩阵乘法.rar矩阵数学

    2010-12-10 17:31:45
    矩阵乘法.rar 计算矩阵的算法 Java实现
  • 背景Python 数据分析离不开矩阵的基础知识,周末看了一章节的数学基础知识,重新学习了一下矩阵的乘法知识,线性代数的知识还是上大学时学的,早就忘干净了,重新整理了一下,其实就是基本的规则记忆,还是能够理解...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 293
精华内容 117
关键字:

java数学乘法

java 订阅