如何用JAVA或c对本福特定律进行数值验证?如果实在不好实现也可以推荐一些链接。
现在用java来编程:
在斐波那契数列中,验证本福特定律的正确性
public class Test {
public static void main(String[] args) {
int n = 800;// 循环次数
int a[] = new int[1000];
int b[] = new int[1000];
int c[] = new int[10];// 计数器
int i, k;
a[0] = 1;// a0表示代表a1...an有效,a0=3,a1,a2,a3
a[1] = 1;// a1代表第一位数字
b[0] = 1;
b[1] = 1;
c[1]++;// 头两位是1,1
c[1]++;
k = 2;
while (0 == 0) {
a = add(a, b);// 相加
c[a[1]]++; // a1是返回数组的第一位数字
System.out.print(a[0] + "***");
for (i = 1; i <= a[0]; i++)
System.out.print(a[i]);
System.out.println();
k++;
if (k == n)
break;
b = add(a, b);
c[b[1]]++;
System.out.print(a[0] + "***");
for (i = 1; i <= b[0]; i++)
System.out.print(b[i]);
System.out.println();
k++;
if (k == n)
break;
}//
System.out.println();
System.out.println();
for (i = 1; i <= 9; i++)
System.out.println(i + "---" + c[i] / (n + 0.0) * 100);
}
//
static int[] add(int[] a, int[] b) {
// a0,a1,a2,a3,a4,a5
// b0 b1,b2,b3
int c[] = new int[1000];
int la = a[0], lb = b[0];
int i = 0, lc = 0;
lc = (la > lb) ? la : lb;// lc最大
c[0] = lc;
if (la > lb) {
for (i = 1; i <= lc - lb; i++)
c[i] = a[i];// 12345,45, 123要a的,后面45+45
for (i = lc - lb + 1; i <= lc; i++)
c[i] = a[i] + b[i + lb - lc];
}
if (la == lb) {
for (i = 1; i <= lc; i++)
c[i] = a[i] + b[i];
}
if (la < lb) {
for (i = 1; i <= lc - la; i++)
c[i] = b[i];// ##
for (i = lc - la + 1; i <= lc; i++)
c[i] = a[i + la - lc] + b[i];
}
for (i = lc; i >= 2; i--) {
c[i - 1] = c[i - 1] + c[i] / 10;
c[i] = c[i] % 10;
}// for
if (c[1] >= 10) {// 不要少写=!!!
for (i = lc + 1; i >= 2; i--)
c[i] = c[i - 1];// 1-->2,c1==c2
c[1] = c[1] / 10;// 只要前面
c[2] = c[2] % 10;// 只要末尾
c[0] = lc + 1;
}
return c;
}// add
}// class