【问题标题】:Monte carlo simulation - probability if two integers are coprime?蒙特卡罗模拟 - 如果两个整数互质的概率?
【发布时间】:2020-07-30 17:44:28
【问题描述】:

我正在尝试编写一个 Java 程序,该程序使用蒙特卡罗模拟来计算两个随机选择的数字互质的概率。如果两个整数均分的唯一正整数是 1,则两个整数互质。我尝试使用欧几里德算法找到 GCD,如果它等于 1,则找到它等于 1 的次数的概率。它没有执行,关于我做错了什么的任何提示?

import java.util.Scanner;

public class MonteCarlo
{
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();

public static int euclidMethod(int a, int b) //euclid's algorithm
{
    if(b==0)
    {
        return a;
    }
    else
    {
        return euclidMethod(b, a % b);
    }
}
public static void main(String args[])
{
    for(int i = 0; i < 100000000; i++)
    {
        if(euclidMethod() == 1)
        {
            return (euclidMethod() / 100); //probability its equal to 1
        }
    }
}
}

【问题讨论】:

  • 这不会编译。您的 euclidMethod 需要两个参数,而您尝试不使用任何参数来调用它。此外,您设置了ab 一次,因此您的模拟只会测试相同的“随机”数数百万次。也许你应该从更简单的开始。

标签: java montecarlo


【解决方案1】:

如果你尝试执行这段代码,你会得到这个错误:

[...]: MonteCarlo 类中的方法 euclidMethod 不能应用于给定类型;

if(euclidMethod() == 1)

必需:int,int

找到:没有参数

[...]

现在,这意味着什么? euclidMethod 需要两个 int 类型的参数,但没有参数找到

你必须打电话:

euclidMethod(a, b);

或类似的东西,只要你想使用该方法。 如果你想调用euclidMethod();,你必须编写一个不带参数的新方法(但这不是你需要的)。

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多