Esercizio 7

Stato
Discussione chiusa ad ulteriori risposte.

imported_ShuraBozz

Utente Silver
20 Ottobre 2008
44
0
0
62
Codice:
Mettendo in list i prima sei numeri primi: 2, 3, 5, 7, 11, e 13, possiamo vedere che il sesto numero primo è 13.

Qual è il 10001° numero primo?

Soluzione in C:
http://shurabozz.pastebin.com/f42457153
 
approccio simile a shura ma algoritmo generalizzato:
http://jacoboss.pastebin.com/f5aba0511

(shura sia il tuo che il mio sono c++ (l'operatore post incrementale non esisteva in c) :D

[ot]bomba ora mi fo la classe Nprimo :D:D:D[/ot]
 
ShuraBozz ha detto:
che io sapessi il C99 lo prevede

si ci stavo giusto ripensando ho detto una stronzata...
il c++ si chiama così perchè in c ++ voleva dire +1 quindi c'era già...
colpa mmia a volte quando trascuro i miei neuroni mi scoreggia il cervello...
 
C++ yeah baby
Codice:
#include<iostream>
using namespace std;

bool ifPrime(int n){
	bool check=true;
	for(int i=2;i<n/2 && check;i++)
		if(!(n%i))//trovato divisore quindi non primo
			check=false;
	return check;
}

//true se trova numero primo???
main(){
	int start=1,count=1,goal=10001,number=4;
	bool primo;
	
	while(count!=goal){
		primo=ifPrime(number);
		if(primo==true){
			//cout<<"number "<<number<<endl;
			number++;
			count++;
		}
		else{
			number++;
		}
		
	}
	cout<<"10001st prime number-> "<<number-1<<endl;
}
 
Il mio in C

Codice:
/* By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see
   that the 6^(th) prime is 13.
   What is the 10001^(st) prime number? */

#include <stdio.h>

int prime(int);
int main()
{
    int i=1, n=3;
    do{
        if(prime(n)){
                     i++;
                     n += 2;
        }
        else
            n += 2;
    }
    while(i != 10001);
    printf("The 10001st prime is: %d\n", n - 2); 
    return 0;
}
int prime(int n)
{
    int i;
    for(i = 2; i <= (int)n/2; i++)
    {
          if(n % i == 0)
               return 0;
    }
    return 1;
}

Tra qualche minuto può darsi posti anche quello in VisualBasic (anche se non mi piace molto... XD)

Eccolo... scusate eventuali (e probabili) errori ma non ci lavoro molto in VB e non ho neanche testato il codice... Giusto per tenermi allenato (ovviamente consigli e correzioni ben accette):

Codice:
Private sub Command1_Click()

Dim i=1, n=3, control As Integer
Do
	control = prime(n)
	if control = 1 Then
		i = i + 1
		n = n + 2
	else
		n = n + 2
	End if
Loop While i <> 10001
Text1.Text = CStr(i)
End Sub

------------------------------------------------

Private Function prime(n As Integer) As Integer
Dim i As Integer
For i = 2 To n \ 2
	if (n Mod i) = 0 Then
		prime = 0
	End if
Next i
prime = 1
End Function
 
Ecco il mio :
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int isPrime(int  x); //controlla se un numero è primo 

int main(void)
{ int  n,cont;
 
  cont = 1; // parto da 1 perchè non passo da due ma due è primo...
  n=1;
  while(cont<10001)
  {
    n += 2;
   
    if(isPrime(n))
        cont++;  
  }

  printf("il 10001esimo numero primo è : %d",n);

  return 0;
}

int isPrime(int  x)
{ int  i,factor = sqrt(x);
 
  for(i=2; i<=factor; i++)
      if(!(x%i))
          return 0;

  return 1;
}
 
[ot] Scusate per l'ot ma Cynical, senza offesa per gli altri utenti, ma con queste righe.. cioè riesci a far capire anche a me il C, ed io so ben poco di questo o forse e perche inizio ad apprendere man mano piu cose e mi viene normale capire la logica del surce, mah.. comunque complimenti. [/ot]
 
Codice:
$p=array();
$i=1;
while(count($p)<10001){
	$i++;
	$t=false;
	foreach($p as $pr)	
		if(!($i%$pr)){
			$t=1;
			break;
		}
	!$t and $p[]=$i;
}
echo $i;
quanto ci impiega il tuo Cynical?
 
Codice:
cynical-kris@cynical-kris-laptop:~/Desktop/Programmi/progettoEulero/problem7$ time ./a.out
il 10001esimo numero primo è : 104743
real	0m0.083s
user	0m0.080s
sys	0m0.000s
 
http://sprunge.us/MCgA?c ( http://sprunge.us/MCgA )

http://i.imgur.com/p3PnL.png

http://sprunge.us/WTNE?c ( http://sprunge.us/WTNE )

http://i.imgur.com/kO62f.png
 
Si, ok ho fatto il furbo:
Codice:
#!/usr/bin/env perl

# Mettendo in lista i primi sei numeri primi: 2, 3, 5, 7, 11, e 13, possiamo vedere che il sesto numero$
#  
# Qual è il 10001° numero primo?
#
# http://search.cpan.org/~zigdon/Math-Prime-TiedArray-0.04/lib/Math/Prime/TiedArray.pm

use strict;
use warnings;
use Math::Prime::TiedArray;

tie my @primes, "Math::Prime::TiedArray";
print $primes[10000]."\n" ;
però lol @ time
Codice:
[~/scripts] $ time perl prime_1001.pl
perl prime_1001.pl  0,78s user 0,01s system 99% cpu 0,790 total
 
http://sprunge.us/PHeH?rb ( http://sprunge.us/PHeH )

http://i.imgur.com/kNath.png
lol.

Non fa così schifo perl, dai
http://sprunge.us/EFbH?pl ( http://sprunge.us/EFbH )

http://i.imgur.com/LJ7Ic.png
 
Stato
Discussione chiusa ad ulteriori risposte.