小编Ven*_*897的帖子

所有数字的总和,直到它在java中成为具有o(1)复杂度的单个数字?

我从亨利那里找到了答案

int sum = n % 9;
if (sum == 0) sum = 9;
Run Code Online (Sandbox Code Playgroud)

这里

java程序,将数字的数字相加直到它是单个数字 例如:2748303 = 2+7+4+8+3+0+3 = 27 = 2+7 = 9

任何人都可以解释添加数字和余数之间的关系吗?

我的逻辑也如下所示,上面的链接中也提到了

int sum = 0;
    while (n > 9 ) {
                 sum=0;
        while (n > 0) {
            int rem;
            rem = n % 10;
            sum = sum + rem;
            n = n / 10;
        }
        n = sum;
    }
Run Code Online (Sandbox Code Playgroud)

但是 2 行答案很棒。

java complexity-theory logic

4
推荐指数
1
解决办法
9352
查看次数

找到一个数是素数,为什么检查直到 n/2 更好。在n的后半部分避免数字的原因是什么

要检查一个数是否为素数,最简单的方法是尝试将数除以 2 到 n,如果任何运算得到余数为 0,则我们说给定的数不是素数。但是最好只在 n/2 之前进行划分和检查(我知道更好的方法是直到 sqrt(n) ),我想知道跳过后半部分的原因。

假设我们是否需要检查数字 11 是否为质数,11/2 = 5。如果我们在这两种情况下都执行 11/6 或 11/7 或 11/8 或 11/9 或 11/10,我们得到的余数为0. 对于任何给定的数字 n 也是如此。

这就是避免下半场的原因吗?“如果你将给定的数字除以任何大于给定数字一半的数字,余数永远不会为 0 或者换句话说,任何大于给定数字一半的数字都不能整除给定数字”

请帮助我知道是否正确

algorithm primes

4
推荐指数
2
解决办法
2万
查看次数

为什么Java Stream sum api以相同的数据类型而不是更大的类型返回总和?

我有一些使用Arrays.stream(int arr [])。sum()添加的整数。它以int返回截断后的总和,而实际总和更大且适合long。为什么流API会通过截断而只返回int而不返回长整数?

尝试使用小整数,例如int myArray [] = {1,5,8}; int sum = Arrays.stream(myArray).sum();

工作正常。

但不适用于其和导致long的更长整数。

下面的情况1可以正常工作并返回14

int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)

而方案2无法使用,因为总和超过32位。它给出的总和为-105032716,而预期值为4189934580

int myArray[] = { 2094967290, 2094967290};
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)

并获得正确的总和,如果我在下面进行操作,则会得到预期的结果4189934580

long sum = 0L + 2094967290+2094967290;
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)

java java-stream

2
推荐指数
1
解决办法
52
查看次数

标签 统计

java ×2

algorithm ×1

complexity-theory ×1

java-stream ×1

logic ×1

primes ×1