Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Si, lo so anche io che quell'algoritmo è una vaccata... o almeno lo è fino a prova contraria (ed è evidente che questa prova non ce l'averemo mai).@St3ve con un buon algoritmo (tipo ECM, del quale non capisco molto) fattorizzare un numero di quelle dimensione è questione di pochi istanti, prova a buttarlo qua dentro.
Detto questo l'algoritmo di Lepore mi sembra una gran vaccata, se non altro perché l'autore dimostra chiaramente di non avere la minima conoscenza della notazione e dei canali stanard per pubblicare i propri risultati usati nel settore
Ho visto che ha fatto crossposting su più forum, ma mi sembra evidente (?) che sia farina del suo sacco. Dubito anche che si sia fatto influenzare da tecniche note, sinceramente sarei sorpreso se le conoscesse. Probabilmente ha postato un po' ovunque perché nessuno è riuscito a capire ciò che a scritto e di conseguenza nessuno è riuscito a convincerlo che non funziona (o che funziona ma non è efficiente).@St3ve hai letto quel link che ti ho quotato? È normale che non sa nemmeno lui cosa fa, è crosspostato in una decina di forum, inutile rispondergli.
con un computer normale non puoi risolvere simultaneamente tutte queste equazioni: devi per forza analizzarne sequenzialmente (in un computer quantistico sarebbe possibile, ma già esiste l'algoritmo di Shor, dovresti conoscerlo).simultaneamente controlliamo:
X^2+30 m X=793 --> m = n/5
X^2+30 m X+ X =793 --> m = (6n-1)/30
.....
......
......
(**)X^2+30 m X+ 18X =793 --> m=(n-3)/5
Sia RSA prodotto di due numeri primi.
per ogni n intero che và da 0 a (RSA-3)/2 inclusi determino
Y=RSA+n^2
Se Y è un quadrato perfetto, ovvero Y=y^2 con y intero, allora si ha
RSA=(y-n)(y+n)
con y-n e y+n diversi da 1
var RSA : intero;//definisco le variabili
var n : intero;
var Y : intero;
Leggi(RSA);
n <- 0;//mette 0 nella variabile n
Y <- RSA + n^2;
Finché(Y non quadrato perfetto){
n <- n+1;
Y <-RSA + n^2;
}
Y <- RadiceQuadrata(Y);
Stampa(Y-n);
Stampa(Y+n);
con un computer normale non puoi risolvere simultaneamente tutte queste equazioni: devi per forza analizzarne sequenzialmente (in un computer quantistico sarebbe possibile, ma già esiste l'algoritmo di Shor, dovresti conoscerlo).
Come sei inoltre arrivato ad affermare che l'algoritmo ha complessità O(log n)?
ho fattorizzato il numero che mi ha dato st3v3 140089267639071478002348819284711337427
in 113955711997959151 cicli
lo so non è un buon risultato
ma volevo chiedervi in quanti cicli lo fattorizza l'algoritmo più veloce esistente per farmi un idea di quanto sono lontano.
non necessita di commentiOvviamente non è sempre la stessa formula.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fattorizza_RSA_sei_h_1_sei_h_1(int *cicli,int RSA);
int main(){
int RSA=0;
int cicli=0;
int jolly;
int fattore=1;
scanf("%d",&RSA);
printf("\n%d\n",RSA);
jolly=(sqrt(RSA/2))/6;
fattore=fattorizza_RSA_sei_h_1_sei_h_1(&cicli,RSA);
printf("\n%d è diviso da %d in %d cicli\n",RSA,fattore, cicli);
}
fattorizza_RSA_sei_h_1_sei_h_1(int *cicli,int RSA){
int jolly=(sqrt(RSA/2))/6;
int i=0;
int G=(RSA-1)/6;
int A=(G-jolly)/(6*jolly+1);
int B=(G-A)/(6*A+1);
int C=2;
while((6*B+1)*(RSA/(6*B+1))!=RSA && (C*(RSA/C)!=RSA && C!=1)){
B++;
(*cicli)++;
C=(-6*i+sqrt(36*i*i+4*RSA))/2;
i++;
}
if(C*(RSA/C)==RSA){return C;}
return (6*B+1);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*rossella è ottimizzato per fattorizzare numeri RSA =p * q dove RSA,p e q sono nella forma 6*h+1*/
/*Autore Alberico Lepore*/
int rossella(long long int *cicli,long long int RSA);
int main(){
long long int RSA=0;
long long int cicli=0;
long long int jolly;
long long int fattore=1;
scanf("%lli",&RSA);
printf("\n%lli\n",RSA);
jolly=(sqrt(RSA/2))/6;
fattore=rossella(&cicli,RSA);
printf("\n%lli è diviso da %lli in %lli cicli\n",RSA,fattore, cicli);
}
rossella(long long int *cicli,long long int RSA){
long long int jolly[99];
int j=0;
long long int i=0;
long long int G=(RSA-1)/6;
long long int A[99];
long long int B[99];
long long int C=2;
long long int D[99];
long long int maggiore=0;
long long int E=0;
for(j=0;j<100;j++){
jolly[j]=(j+1);
}
for(j=0;j<100;j++){
A[j]=(G-jolly[j])/(6*jolly[j]+1);
B[j]=(G-A[j])/(6*A[j]+1);
}
j=0;
while(j<100){
while(A[j]>B[j]){
D[j]=B[j];
A[j]=(G-6*B[j]-1)/(6*(6*B[j]+1));
B[j]=(G-A[j])/(6*A[j]+1);
(*cicli)++;
}
j++;
}
for (j=0;j<100;j++){
if(D[j] > maggiore){
maggiore=D[j];
}
}
E=(G-maggiore)/(6*maggiore+1);
if(E>((sqrt(RSA))-1)/6){
while((RSA/(6*E+1))*(6*E+1)!=RSA){
E--;
(*cicli)++;
}
}else{
for(j=7;j<=sqrt(RSA);j++){
printf("\nj=%d\n",j);
if(RSA%j==0){
printf("\nl'algoritmo rossella è ottimizzata per RSA reali anche se implementato con long long int\n");
return j;
}
}
}
return (6*E+1);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*rossella è ottimizzato per fattorizzare numeri RSA =p * q dove RSA,p e q sono nella forma 6*h+1*/
/*Autore Alberico Lepore*/
int rossella(long long int *cicli,long long int RSA);
int main(){
long long int RSA=0;
long long int cicli=0;
long long int jolly;
long long int fattore=1;
scanf("%lli",&RSA);
printf("\n%lli\n",RSA);
jolly=(sqrt(RSA/2))/6;
fattore=rossella(&cicli,RSA);
printf("\n%lli è diviso da %lli in %lli cicli\n",RSA,fattore, cicli);
}
rossella(long long int *cicli,long long int RSA){
long long int jolly[99];
int j=0;
long long int i=0;
long long int G=(RSA-1)/6;
long long int A[99];
long long int B[99];
long long int C=2;
long long int D[99];
long long int maggiore=0;
long long int E=0;
for(j=0;j<100;j++){
jolly[j]=(j+1);
}
for(j=0;j<100;j++){
A[j]=(G-jolly[j])/(6*jolly[j]+1);
B[j]=(G-A[j])/(6*A[j]+1);
}
j=0;
while(j<100){
while(A[j]>B[j]){
D[j]=B[j];
A[j]=(G-6*B[j]-1)/(6*(6*B[j]+1));
B[j]=(G-A[j])/(6*A[j]+1);
(*cicli)++;
}
j++;
}
for (j=0;j<100;j++){
if(D[j] > maggiore){
maggiore=D[j];
}
}
E=maggiore;
if(E<((sqrt(RSA))-1)/6){
while((RSA/(6*E+1))*(6*E+1)!=RSA){
E--;
(*cicli)++;
}
}else{
for(j=7;j<=sqrt(RSA);j++){
printf("\nj=%d\n",j);
if(RSA%j==0){
printf("\nl'algoritmo rossella è ottimizzata per RSA reali anche se implementato con long long int\n");
return j;
}
}
}
return (6*E+1);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
long long int al(long long int RSA,long long *cicli);
int main(){
long long int RSA=1;
long long int fattore=1;
long long int cicli=0;
printf("Inserisci il primo numero\n");
scanf("%lli",&RSA);
clock_t start = clock();
fattore=al(RSA,&cicli);
clock_t end = clock();
printf("Tempo di esecuzione = %f secondi \n", ((double)(end - start)) / CLOCKS_PER_SEC);
printf("\n%lli e' diviso da %lli calcolato in %lli cicli\n",RSA,fattore,cicli);
}
long long int al(long long int RSA,long long *cicli){
long long int minimo_somma=2*(sqrt(RSA)-1)/6;
long long int a=1;
long long int G=(RSA-1)/6;
long long int resto=G%6;
long long int prodotto;
minimo_somma=minimo_somma - (minimo_somma%6);
while((6*a+1)*(RSA/(6*a+1))!=RSA || 6*a+1==1){
prodotto=(G-(minimo_somma+resto))/6;
a=(minimo_somma+resto + sqrt((minimo_somma+resto)*(minimo_somma+resto)-4*prodotto))/2;
minimo_somma=minimo_somma+6;
(*cicli)++;
}
return (6*a+1);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
/*Al + rossella è un algoritmo di fattorizzazione generico ottimizzato serve per fattorizzare numeri NR =p * q dove NR,p e q sono nella forma 6*h+1*/
/*Autore Alberico Lepore*/
long long int Al(long long int RSA,long long *cicli);
long long int rossella(long long int *cicli,long long int RSA);
int main(){
long long int RSA=1;
long long int fattore=1;
long long int cicli=0;
printf("Inserisci il primo numero\n");
scanf("%lli",&RSA);
clock_t start = clock();
fattore=Al(RSA,&cicli);
clock_t end = clock();
printf("Tempo di esecuzione = %f secondi \n", ((double)(end - start)) / CLOCKS_PER_SEC);
printf("\n%lli e' diviso da %lli calcolato in %lli cicli\n",RSA,fattore,cicli);
}
long long int Al(long long int RSA,long long *cicli){
long long int minimo_somma=rossella(cicli,RSA);
long long int a=1;
long long int G=(RSA-1)/6;
long long int resto=G%6;
long long int prodotto;
long long int i=1;
long long int y=2;
minimo_somma=(minimo_somma + (RSA/minimo_somma)-1)/6;
minimo_somma=minimo_somma - (minimo_somma%6);
while((6*a+1)*(RSA/(6*a+1))!=RSA || 6*a+1==1){
prodotto=(G-(minimo_somma+resto))/6;
a=(minimo_somma+resto + sqrt((minimo_somma+resto)*(minimo_somma+resto)-4*prodotto))/2;
minimo_somma=minimo_somma+6;
(*cicli)++;
y=RSA/(6*i+1);
if((6*i+1)*y==RSA){
break;
}
i++;
}
if((6*i+1)*(RSA/(6*i+1))==RSA){
return (6*i+1);
}
return (6*a+1);
}
long long rossella(long long int *cicli,long long int RSA){
long long int jolly[99];
int j=0;
long long int i=0;
long long int G=(RSA-1)/6;
long long int A[99];
long long int B[99];
long long int C=2;
long long int D[99];
long long int maggiore=0;
long long int E=0;
for(j=0;j<100;j++){
jolly[j]=(j+1);
}
for(j=0;j<100;j++){
A[j]=(G-jolly[j])/(6*jolly[j]+1);
B[j]=(G-A[j])/(6*A[j]+1);
}
j=0;
while(j<100){
while(A[j]>B[j]){
D[j]=B[j];
A[j]=(G-6*B[j]-1)/(6*(6*B[j]+1)+1);
B[j]=(G-A[j])/(6*A[j]+1);
(*cicli)++;
}
j++;
}
for (j=0;j<100;j++){
if(D[j] > maggiore){
maggiore=D[j];
}
}
return (6*maggiore+1);
}