Java:以有效的方式查找非常大的除数的总数

时间:2016-06-12 11:41:19

标签: java

号码是 n = 2747502308387844992 count = 0 像for循环这样的常规方法不起作用。

for(i=1;i<n;i++)
{
    if(n%i == 0 ){count++;}
}
System.out.println(count%(Math.pow(10,9)+7));

要打印的输出 10240 。 建议我另一种有效的方法。 请在放入此处之前在IDE中尝试解决方案。

2 个答案:

答案 0 :(得分:2)

您可以将数字分配到某些范围的分区中,然后使用线程查找这些间隔的除数并将它们添加到ArrayList中。

让我们说你想找到10的除数。你可以把它分成[1,5]和[6,10]的区间。然后使用2个线程来并行计算除数。

您也可以使用线程池。创建一个实现Runnable接口的类,并向构造函数添加一个数字。使用run方法计算除数并将其添加到共享列表中。

答案 1 :(得分:0)

int end = (int) Math.sqrt(x);
for(i=1;i<end;i++)
{
    if(n%i == 0 )
    {
          count=count+2;
    }

}
if(n%end == 0 && n*n==end){count=count+1;}
if(n%end == 0 && n*n!=end){count=count+2;}
System.out.println(count);