如何为sigma添加幂函数

时间:2019-01-15 13:48:00

标签: java user-interface math

我已经编写了这段代码,用于计算正除数之和,所有值必须为a的幂。

例如:

System.out.println("Get blob metadata:"); 
             HashMap<String, String> metadata = blob.getMetadata(); 
             Iterator it = metadata.entrySet().iterator(); 
             while (it.hasNext()) { 
                Map.Entry pair = (Map.Entry) it.next(); 
                 System.out.printf(" %s = %s%n", pair.getKey(), pair.getValue()); 
                 it.remove(); 
             } 

我尝试了不同的版本,但是我不知道如何添加幂函数。

sigma(0,14) = 1^0 + 2^0 + 7^0 + 14^0 = 4;
sigma(2,12) = 1^2 + 2^2 + 3^2 + 4^2 + 6^2 + 12^2 = 210. 
sigma(a, b).

5 个答案:

答案 0 :(得分:2)

在Java中,blob.upload_from_string(file_stream, content_type=content_type) 字符表示XOR。

Math.pow()方法提供了^函数。

因此power将是3^2

如果您想自己为整数实现它,则可以像这样简单地完成它:

Math.pow(3, 2)

但是我不会自己做。对于浮点数,它变得更加复杂,并且Java具有本机底层实现,该实现要快得多。

答案 1 :(得分:2)

IntStream提供了简洁明了的计算。

static int sigma(int exp, int num) {
    IntStream.rangeClosed(1, num)      // 1, ..., num
        .filter(k -> num % k == 0)     // Only divisors
        .map(k -> pow(k, exp))
        .sum();
}

static int pow(int k, int exp) {
    if (exp == 0) {
        return 1;
    }
    int squareRoot = pow(k, exp/2);
    int n = squareRoot * squareRoot;
    return (exp % 2) == 0 ? n : n*k;
}

可以通过不使用exp的{​​{1}}#个乘法,而是使用平方根来优化功效计算。


对于那些对程序转换感兴趣的人:

k仅需要依靠pow(k, exp)递归到exp / 2(整数除法)。这样一来,您就可以将代码完全翻过来,拥有除数向量, 并对此进行操作。

答案 2 :(得分:0)

如果您想不使用Math.pow()来实现它,则可以简单地遵循exponentiation的数学定义以获得正指数:

public static long exp(int a, int b){ //computes a^b
    long result = 1;
    for (int i = 0; i < b; i++) {
        result *= a;
    }
    return result;
}

答案 3 :(得分:0)

我建议您使用Java lambda来完成所需的工作。

接受输入并返回正除数列表本身似乎很有用。

使用lambda可以轻松完成提高每项能力的任务。

将两个功能分开。采取更实用的方法。

答案 4 :(得分:0)

这是为您准备的简单代码:

public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);

        List<Integer> listOfBs = new ArrayList<>();
        System.out.println("Input your a");
        int a = scanner.nextInt();

        System.out.println("Input your b");
        int b = scanner.nextInt();
        int sqrt = (int) Math.sqrt(b);

        for (int i = 1; i <= sqrt; i++) {
            if (b % i == 0) {
                listOfBs.add(i);
                int d = b / i;
                if (d != i) {
                    listOfBs.add(d);
                }
            }
        }

        int sigma = 0;
        for(int e : listOfBs)
        {
            sigma += Math.pow(e,a);
        }

        System.out.println("Your sigma function is: "+sigma);

    }   
}