PDA

View Full Version : [C] Programmino... non mi ammazzate


Manugal
21-04-2005, 17:13
Ciao.

Devo fare un programmino che fa riferimento alla congettura di Gladbach, il quale asserisce che ogni intero pari n maggiore di 2 è la somma di due numeri primi. Il libro consiglia di usare la funzione is_prime() che è una funzione che mi restituisce 1 se il numero n è pari e 0 altrimenti. Ma per calcolare questa congettura che ci faccio con questa funzione. A me non serve sapere se un numero è pari o no, perché tanto io faccio un ciclo (in questo caso devo farlo partire da 700 fino a 1100 secondo quanto mi chiede il libro) e lo faccio aumentare con step di 2. Quindi è ovviamente sempre pari il numero che vado a considerare. Quindi come faccio a dirgli ad esempio che 700=17+683? Grazie. :)

anx721
21-04-2005, 19:08
Dato il numero n devi trovare una copia di numeri prima la cui somma sia n. se hai una funzione

is_prime(int x)

puoi iniziare a scorrerti i numeri da 1 fino a n/2; per ogni numero k che esamini cottrolli se k è primo e se (n-k) è primo. appena trovi un k tale che k ed n-k sono primi hai trovato la coppia che cercavi.

Manugal
21-04-2005, 19:18
Non ho capito molto. Io devo scorrere i numeri da 700 a 1100, che significa cominci a scorrere i numeri da 1 a n/2?

anx721
21-04-2005, 19:20
per ogni numero n di cui ti interessa trvare la coppia di numeri primi che hanno per somma n devi fare quello che ti ho scritto

Ziosilvio
21-04-2005, 19:38
Devo fare un programmino che fa riferimento alla congettura di Gladbach, il quale asserisce che ogni intero pari n maggiore di 2 è la somma di due numeri primi.
Allora è la congettura di Goldbach.
Il libro consiglia di usare la funzione is_prime() che è una funzione che mi restituisce 1 se il numero n è pari e 0 altrimenti. Ma per calcolare questa congettura
Non puoi "calcolare" qualcosa per cui non si sa se esiste una procedura ricorsiva.
Puoi però verificarla per valori non troppo grandi: ed è quello che ti chiede l'esercizio.
che ci faccio con questa funzione. A me non serve sapere se un numero è pari o no, perché tanto io faccio un ciclo (in questo caso devo farlo partire da 700 fino a 1100 secondo quanto mi chiede il libro) e lo faccio aumentare con step di 2. Quindi è ovviamente sempre pari il numero che vado a considerare.
Il numero è pari.
I fattori che cerchi, no (a meno che il numero non sia 4).
Quindi come faccio a dirgli ad esempio che 700=17+683? Grazie. :)
Dire che N è somma di due numeri primi, equivale a dire che esiste un numero primo k tale che N-k sia anch'esso primo.
A questo punto la soluzione dell'esercizio dovrebbe essere immediata (ti servono due cicli annidati).

repne scasb
26-04-2005, 22:02
#define N_PRIME 10000

void main(void)

{
unsigned long table_prime[N_PRIME];
unsigned char result_table[N_PRIME<<1];
unsigned long i,j;

for(i=0;i<N_PRIME<<1;i++)
result_table[i]=0;

for(i=0;i<N_PRIME;i++)
{
for(j=i;j<N_PRIME;j++)
result_table[table_prime[i]+table_prime[j]]=1;
}

for(i=4;i<=table_prime[N_PRIME-1];i+=2)
{
if(result_table[i]==0)
{

/* VERIFY FAIL */

}
}
}

DanieleC88
26-04-2005, 22:27
We... repne! Sei tornata!
Bello, ora passo subito a studiarmi il tuo codice. ;)

Manugal
22-09-2005, 15:49
Ciao a tutti!!! Ho ritirato fuori una bella discussione ehh :D

A distanza di 8 mesi sono riuscito a fare questo programma vi posto il codice così vedete se ho fatto tutto bene:



#include "funzioni.h"


#define START 700
#define FINISH 1100

int main(void){
int i,j,k;

printf("\nEvery even number greater than 2 is the sum of two primes\n\n");

for(i=START; i<=FINISH; ++i)
for(j=1; j<i; ++j)
if((is_prime(j)) && is_prime(i-j)){
printf("%d = %d + %d\n", i, j, i-j);
break;
}
return 0;
}





Volevo sapere se c'è qualche sito o anche qualche libro che abbia esercizi che mi facciano imparare bene il C. Perché il mio libro non ne ha molti di questo tipo. Grazie.

Ziosilvio
24-09-2005, 23:28
Volevo sapere se c'è qualche sito o anche qualche libro che abbia esercizi che mi facciano imparare bene il C.
Kernighan&Ritchie (http://hpe.pearsoned.it/site/show.php?curr_sec=catalogo&sub_sec=cat_sk_libro&ISBN=887192200x)+ l'archivio delle FAQ del newsgroup comp.lang.c (http://www.eskimo.com/~scs/C-faq/top.html).