蒙特卡罗思想计算圆周率的三种算法
本篇文章介绍计算圆周率的几种算法,都是应用蒙特卡罗思想:或称计算机随机模拟方法,是一种基于“随机数”的计算方法。
方法一:蒙特卡罗方法,内切圆1.1思想
有一个以(0,0)为中心的2*2的正方形,及这个正方形的半径为1的内接圆,取这个正方形范围内的一点,则这个点落入内接圆的概率为PI/4。
1.2程序
程序分为两部分:(1)随机生成正方形内的一点(2)计算落入内接圆的概率,从而求得PI。
import java.util.Random;public class PrimeNum {Random r = new Random();//用于生成随机数int m = 0;//互质的次数int n = 1000000;//实验次数float result = 0;//结果,即PIpublic static void main(String[] args){PrimeNum p = new PrimeNum();p.calculatePI();}public int getNum(){int tmp = r.nextInt();while(tmp<1){//r.nextInt()得到了的可能是负数tmp = r.nextInt();}return tmp;}public Boolean checkPrime(int a, int b){//判断两个数是否互质if(a<b){int tmp = a;a = b;b = tmp;}int c = 0;while((c = a%b)!= 0){a = b;b = c;}if(b == 1)return true;elsereturn false;}public void calculatePI(){for(int i = 0; i <n;i++){//进行n次实验int num1=getNum();//随机获得两个自然数int num2 = getNum();if(checkPrime(num1,num2))//判断是否互质m++;//若互质,则m+1}result = (float) java.lang.Math.sqrt((6*n)/(float)m);System.out.println("m: "+ m);System.out.println("n: "+ n);System.out.println("result: "+result);}}