2011-10-20 191 views
1

我想创建一个应用程序,将弄清楚如何找到第n个位置上的数字benfords法律,到目前为止,我还没有能够做到这一点。我可以在第一个位置找到号码,但之后我不确定。下面是本福特定律的资源:爪哇Benfords法

http://www.mathpages.com/home/kmath302/kmath302.htm

有什么我想在最底部(最后一个公式)做的,但我似乎无法让它进入代码工科数学公式。

这是我做的第一个数字在任何给定的位置:

public static double probability(int position, int digit) 
{ 
    double result = Math.log(1+(1/(double) digit))/Math.log(10); 
    return result; 
} 

任何想法如何实现它的总结部分?我非常肯定它会涉及到for循环,但是当我尝试它时似乎并不奏效。

编辑--------------------------------------------- -------------------------------------------

感谢tskuzzy's答案我找到了答案。这是你会怎么做它在Java中:

public static double probability(int position, int digit) { 
double p = 0.0; 

for(int k = (int) Math.pow(10,position-1); k < Math.pow(10,position); k++) 
{ 
    p += Math.log(1+1.0/(k*10 + digit)); 
} 

return p/Math.log(10); 
} 

回答

2

是的,这只是一个for循环:

public static double probability(int position, int digit) { 
    double p = 0.0; 

    for(int k = Math.pow(10,position-1); k < Math.pow(10,position); k++ { 
     p += Math.log(1+1.0/(k*10 + digit)); 
    } 

    return p/Math.log(10); 
} 
+0

那是一个伟大的想法,但你不能使用双在for循环和如果你将k作为一个整数,它不会以数学方式工作,因此不会返回正确的答案... – Rmyers

+0

等待我尝试了错误的方式......这实际上是正确的答案。谢谢! – Rmyers