quarta-feira, 14 de março de 2012

Feliz Dia do pi

No dia 14 de março é comemorado o dia do π (3/14 1:59),  esse dia e hora foram escolhidos porque formam os primeiros dígitos do número π
π =3.14159265358979323846264338327950288419716939937510...

O π é um número bastante especial O π é irracional, ou seja, o valor do π não pode ser expresso exatamente como uma fração com numerador e denominador inteiros. 

O π também é transcendental, ou seja, π não é raiz de nenhuma equação polinomial com coeficientes racionais.Por exemplo,  é irracional mas não é transcendental uma vez que é raiz da seguinte equação polinomial com coeficientes racionais


P(x) = x2-2


As pessoas normais comemoram o dia do π fazendo uma torta.



Nós vamos comemorar o dia do π calculando o π de uma maneira diferente :)

Dado um par de números escolhidos a partir de uma coleção de números aleatórios, a probabilidade desses dois números não terem nenhum fator em comum, ou seja, serem primos entre si é aproximadamente



Vamos fazer um programa para gerar uma coleção de números aleatórios e depois calcular a probabilidade de dois números escolhidos serem primos entre si.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int mdc(int a,int b){
  int r;
  while(b!=0){
    r = a%b;
    a=b;
    b=r; 
  }
  return a;
}

int main(){
  
  int i,n;
  int v[32767];
  int cont,total;
  
  
  
  while(1){
  
  printf("Entre com n:");
  scanf("%d",&n);
  
  if(n==0) break;
  
  //inicializando  a semente para a
  //geracao dos numeros aleatorios
  srand ( time(NULL) ); 
  
  //rand() gera um número aleatorio entre 0 e RAND_MAX
  //RAND_MAX=32767
  
  //gerando n numeros aleatorios
  for(i=0;i<n;i++) { 
    v[i] = rand();
  }
  
  cont = 0;
  total = 0;
  for(int i=0;i<n;i++)
    for(int j=i+1;j<n;j++){
        total++; //total de pares escolhidos
        if( mdc(v[i],v[j])==1) cont++; 
        //quantidade de numeros primos entre si
    }
  printf("%lf\n", sqrt((6.0*total)/cont));   
  }  
  
}


 
Execução do Algoritmo:
Entre com n:100
3.185965
Entre com n:1000
3.094160
Entre com n:10000
3.147962
Entre com n:20000
3.126466
Entre com n:0
 
 
Você pode ver também:
http://oeis.org/A000796 
 
 

2 comentários:

Anônimo disse...

David Sena na área passando aqui só pra embaçar o post.

EITA forma feia de calcular o pi.

O pi também pode ser calculado como a quantidade de pontos que cai dentro de um círculo inscrito num quadrado.
Já virou até questão de concurso:

Questão para Analista de Sistema Júnior da petrobrás de 2010 - Banca Cesgranito

######################

public class Main {
private static final int QUANTIDADE_NUMEROS = 1000;

public static void main(String[] args) {
java.util.Random r = new java.util.Random();
int n = 0;

for(int i = 0; i < QUANTIDADE_NUMEROS; i++) {
double x = r.nextDouble();
double y = r.nextDouble();

if(x*x + y*y <= 1) {
n = n + 1;
}
}
System.out.println(4.0 * n / 1000);
}
}

Analisando o programa acima, escrito em linguagem Java, conclui-se que o
programa
(A) não compila, pois a classe Random deveria ter sido importada (com a
diretiva import).
(B) não compila, visto que um atributo qualificado como final não pode ser
usado em um comando de repetição.
(C) imprime o valor numérico 4,0.
(D) imprime o valor numérico zero.
(E) imprime um valor numérico aproximado da constante matemática PI (cujo
valor, até a 4a casa decimal, é 3,1415).

Wladimir Araújo Tavares disse...
Este comentário foi removido pelo autor.