求PI

很先進的方法。。。從0~32767個隨即數中取出N個數,每2個為一對,共C2n對
找出其中除1以外沒其他公約數的對子,m對

6/pi^2=m/C2n

還是暴力搜索。。。用時比較大

#include <iostream>
#include 
<vector>
#include 
<string>
#include 
<math.h>
#include 
<iomanip>
using namespace std;


int main()
{
    
int n,ran;
    vector
<int> num;
    
while (1)
    
{
        cin
>>n;
        
if (n==0)
        
{break;    }
        num.clear();
        
int sum=n*(n-1)/2;
        
while (n>0)
        
{
            cin
>>ran;
            num.push_back(ran);
            n
--;
        }

        
bool match;
        
int count=0;
        
for (size_t i=0;i<num.size()-1;i++)
        
{
            
for (size_t j=i+1;j<num.size();j++)
            
{
                match
=true;
                
for (int k=2;k<=(num[i]>num[j]?num[j]:num[i]);k++)
                
{
                    
if (num[i]%k==0&&num[j]%k==0)
                    
{
                        match
=false;
                        
break;
                    }

                }

                
if (match==true)
                
{count++;
                }

            }

        }

        
if (count==0)
        
{
            cout
<<"No estimate for this data set."<<endl;
        }

        
else
        
{
           
double pi=6*sum/(double)count;
           cout
<<setprecision(7)<<sqrt(pi)<<endl;
        }

    }

}

PS:貌似也可以用求2數的公約數來做,當不為1時,就不要了
int gys(int a, int b)
{ int r; //用于ab互換
if(a<b){r=a; a=b; b=r;} //如果a比b小就互換,使a比b大
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
/*這個while就是這個程序的核心,它不斷的使a和b做除然后求除余數然后最大的數a就沒有用了,因為他們的公因數與現在的r和b的公因數相同。而這時,b的值會比r大,為了保證b為小的那個數,所以需要將b的值給a將r的值給b。然后繼續做除,直到b=0時表示。已經被整除掉了。這時的a就為他們的最大公約數。*/
return a; //將最大公約數返回。
}