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
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:
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).
Postar um comentário