-
†Axel.
User deleted
QUOTEVerificare se un numero è primo utilizzando una funzione ricorsiva
La mia soluzioneSPOILER (click to view)CODE#include <iostream>
using namespace std ;
bool primo ( int i , int n ) {
if ( i == 1 ) return true ;
if ( n % i == 0 ) return false ;
primo( --i , n ) ;
}
int main ( int argc , char** argv ) {
int i=0 , n ;
cin >> n ;
if ( primo( n/2 , n ) ) cout << "Numero primo" << endl ;
else cout << "Numero non primo" << endl ;
return 0 ;
}. -
Alchimist.
User deleted
C - Code SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int max, num;
int *start, *primes;
int prime(int i) {
if(num%primes[i] == 0)
return 0;
if(i<max)
prime(++i);
return 1;
}
int main(void) {
int i, j;
printf("Insert the number: ");
scanf("%d", &num);
if(num < 2) {
printf("You must insert a number greater than 1.");
return -1;
} else if(num == 2) {
printf("%d is prime.", num);
return 0;
} else if(num%2 == 0) {
printf("%d is NOT prime.", num);
return 1;
}
max = ((int)(sqrt(num)-0.5)%2 == 0) ? (int)(sqrt(num)-0.5)/2 : ((int)(sqrt(num)-0.5)-1)/2;
start = calloc(max, sizeof(int));
for(i=0; i<max; i++)
start[i] = (i*2)+3;
for(i=0; i<max; i++) {
if(start[i] == 0)
continue;
for(j=(i+1); j<max; j++)
if(start[j] != 0 && start[j]%start[i] == 0)
start[j] = 0;
}
for(i=0, j=0; i<max; i++)
if(start[i] != 0) {
primes = realloc(primes, j+1);
primes[j++] = start[i];
}
if(prime(0))
printf("%d is prime.", num);
else
printf("%d is NOT prime.", num);
free(start);
free(primes);
return 0;
}. -
.
Dovrebbe essere corretto.
JavaCODICEclass Primo {
boolean isPrime(int n) {
if(n%2 == 0) return false;
return isPrime(n,3);
}
private boolean isPrime(int n, int i) {
if((n%i == 0) && (n!=i)) return false;
else if((n%i == 0) && (n==i)) return true;
else return isPrime(n,i+=2);
}
}
class TestPrimo {
public static void main(String[] args) {
Primo p = new Primo();
System.out.println(p.isPrime(33));
}
}. -
†Axel.
User deleted
Scheme : http://sprunge.us/befS?scm . -
Guglielmoqwerty.
User deleted
Ed infine la mia (conoscete un algoritmo più veloce di quello con la radice quadrata?) CODICEpublic boolean isPrimo(int n)
{
if(sqrt(n)%1==0.0D) { return false; } //Controllo se è un quadrato (e se è 1)
if(n==0) {return false;}
n = sqrt(abs(n));
int divisore=2;
while(numero%divisore!=0)
{
divisore++;
}
return(numero!=divisore);
}. -
.
Potresti scorrere solo i numeri dispari, e non quelli pari. . -
Guglielmoqwerty.
User deleted
Giusto, non ci avevo pensato .