Chiedo consiglio se questo Algoritmo . E' più veloce oppure no ??

di il
2 risposte

Chiedo consiglio se questo Algoritmo . E' più veloce oppure no ??

Ciao ,


Volevo sapere se questo algoritmo per la fattorizzazione e più veloce perchè ha 61 operazioni mentre un algoritmo semplice ha 584 operazioni , è un algoritmo sulla fattorizzazione come avrete già capito ma siccome vorrei farmelo fare a pagamento sul sito di starbytes , volevo un parere se possibile :

Algoritmo veloce (non lo metto tra i tag code perchè è più uno pseudocodice) :



997 * 43 = 42871

Fase PRE-fattorizzazione :

Inserire prodotto N : 42871

Inserire N4 ( Numero Dispari ): 337



Esempio completo con sottrazione unita'.


//Prima confrona N /N4 Fase A

42871 / 337 = 127

127 * 337 = 42799

D = 42871 - 42799 = 72 // Differenza D viene memorizzato per il confronto successivo con un altra D

Fase B

// si sottraè una unità da 127 che diventa 27

42871 / 27 = 42849

27 * 42849 = 1156923

D1 = 42871 - 1156923 = -1114052 // D1 non prende il posto di D perchè è negativo , di conseguenza 27 torna 127

Fase C
//Adesso si sottrae una unità dalla seconda cifra di 127 che diventa 117 e si ripete la procedura

42871 / 117 = 366

366 * 117 = 42822

D1 = 42871 - 42822 = 49 // D1 viene memorizzato al posto di D per il prossimo confronto e 117 diventa 107


.....continua 97 = 87 = 77 = 67 fino ad arrivare a 37 che risulterà negativo come 27(Fase B)
l'ultimo numero positivo è 47 ovvero

42871 / 47 = 912

912 * 47 = 42864

42871 - 42864 = 7 // Questa è la distanza minore positiva , quindi si procede prendendo il numero 47 e si sottrae -2
// con un ciclo While finchè non si otterranno i due fattori.




Mentre l'algoritmo semplice è :

42178/337-2 Si procede con un ciclo finchè non si raggiunge il fattore 43


Ed ho calcolato che il primo algoritmo effettua 50 tra divisioni/sottrazioni/moltiplicazioni + 11 confronti = 60 operazioni.
Mentre il secondo effettua 292 divisioni e 292 confronti = 584 operazioni.

Grazie a tutti.

2 Risposte

  • Re: Chiedo consiglio se questo Algoritmo . E' più veloce oppure no ??

    Assolutamente incomprensibile ....

    Questo è un algoritmo?

    "42178/337-2 Si procede con un ciclo finchè non si raggiunge il fattore 43"
  • Re: Chiedo consiglio se questo Algoritmo . E' più veloce oppure no ??

    @oregon

    Ti metto l'Algoritmo che mi sono fatto già fare su starbytes con i supernumeri ovviamente , guarda bene il ciclo While quello intendevo .
    // Inizio Programma XXX da implementare
    //in modo da fare operazioni con supernumeri
    
    #include<stdio.h>
    #include<math.h>
    
    int main ()
    
    { 
    
    int a1 = 0;
    int aa = 0;
    int aa1 = 0;
    int a = 0;
    int b = 0;
    int b1 = 0;
    int bb1 = 0;
    int bb2 = 0;
    int c = 0;
    int c1 = 0;
    int cc1 = 0;
    int cc2 = 0;
    int cc3 = 0;
    int d = 0;
    int e = 0;
    int f = 0;
    
    printf("Trovare i due fattori di un prodotto\n\n");
    
    printf("Inserire fattore Primo : \n\n");
    
    scanf("%d",&a1);
    
    printf("Inserire secondo fattore Primo : \n\n");
    
    scanf("%d",&b1);
    
    c1 = a1*b1;
    
    printf("Prodotto (N) : %d\n\n",c1);
    
    printf("Step1 :: trovare N1 con 2*sqrt(0.333*prodotto) , quindi inserire un prodotto (N) : \n\n");
    
    scanf("%d",&aa); // non deve essere lo stesso prodotto di c1 necessariamente
    
    aa1 = 2*sqrt(0.333*aa);
    
    printf( "N1 = %d\n\n",aa1);
    
    printf("Step2 :: trovare N2 con sqrt(prodotto) : \n\n");
    
    bb1 = sqrt(aa);
    
    printf("N2 = %d\n\n",bb1);
    
    bb2 = aa1 + bb1;
    
    printf("Step3 :: trovare N3 con N1+N2 : %d\n\n",bb2);
    
    cc1 = ((aa/bb2)*3.5);
    
    printf("Step4 :: trovare First Way(N4) con ((prodotto/N3)*3.5) : %d\n\n",cc1); 
    
    cc2 = (aa/bb2);
    
    printf("Step4.1 :: trovare Second Way(N4) con (prodotto/N3) :%d\n\n",cc2); 
    
    cc3 = ((aa/bb2)*4);
    
    printf("Step4.2 :: trovare Third Way(N4) con ((prodotto/N3)*4) :%d\n\n",cc3);
    
    printf("Fase Fattorizzazione !!\n\n");
    
    printf("Inserire numero N dispari (prodotto) : \n\n");
    
    scanf("%d",&a);
    
    printf("Inserire numero N4 (Step4,4.1,4.2)(divisore dispari) : ");
    
    scanf("%d",&b);
    
    while ( a != (e) )
    
    {
    
    d = a / b;
    e = b*d;
    b = b-2;
    
    if (e == a)
    
    {
    
    printf("Fattore Primo 1: %d",d);
    
    f = a / d;
    
    printf("\n\nFattore Primo 2: %d",f);
    
    }
    }
    scanf("%d",aa);
    }
    //Fine Programma XXX
Devi accedere o registrarti per scrivere nel forum
2 risposte