题目分析
更准确的说,下面写的代码是 估计两个小于或者等于N 的互异随机正整数互素的概率。
这里代码没有采用随机数的生成方式,而是枚举了所有可能的情况,算出了一对小于等于N的互异正整数互素的对数占所有互异正整数对数的份额。
在数学意义上,随着 N 的增大,其概率趋近于 6/(π^2)
代码实现
参考书上的伪代码,我编写了一个可以运行的代码:
#include <bits/stdc++.h>using namespace std;int gcd(int m,int n){if(n>m) swap(m,n);while(n>0){int remainder=m%n;m=n;n=remainder;}return m;}int main(){int rel=0;int tot=0;int n=10;int time=100;while(time--){for(int i=0;i<=n;i++){for(int j=i+1;j<=n;j++){tot++;if(gcd(i,j)==1){rel++;}}}cout<<"n:"<<n<<" probability:"<<(double)rel/tot<<endl;n*=10;}}
