号码是 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中尝试解决方案。
答案 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);