Vorremmo fattorizzare un semiprimo . L'obiettivo di questa sfida è quella di trovare due piccoli interi e tali che può essere banalmente fattorizzata con il metodo di Fermat, consentendo in tal modo di dedurre facilmente i fattori di .u v u v N N
L'obiettivo
Dato un semiprimi e un intero positivo , definiamo ed come:k x y
y=x2-kN
Passaggio n. 1: trova
Devi prima trovare il valore più piccolo possibile di modo che sia un numero quadrato ( aka quadrato perfetto).y
Ciò consente di fattorizzare con una singola iterazione del metodo di fattorizzazione di Fermat . Più concretamente, questo porta immediatamente a:
(Aggiornamento: questa sequenza è ora pubblicata come A316780 )
Step # 2 - Fattorizza
Devi quindi trovare i due numeri interi positivi e tali che:v
c u = x + √
dove e sono i fattori primi di .d N
Sommario
Il vostro compito è quello di scrivere un programma o funzione che prende come input e stampe o uscite e in qualsiasi ordine e qualsiasi formato ragionevole.u v
Esempio
Consideriamo
Passo 1
Il valore più piccolo possibile di è , che dà:40
y=2.8232-40×199.163=7969,329 mila-7,96652 milione=2809=532kN=(2823+53)×(2823-53)kN=2876×2770
Passo 2
La fattorizzazione corretta di è k = 4 \ volte 10 , perché:k = 4 × 10
k N = ( 719 × 4 ) × ( 277 × 10 ) N = 719 × 277
Quindi, la risposta corretta sarebbe o .[ 10 , 4 ]
Regole
- Non è necessario applicare rigorosamente i due passaggi sopra descritti. Sei libero di usare qualsiasi altro metodo, purché trovi i valori corretti di e .v
- Devi supportare tutti i valori di fino alla dimensione massima nativa di un numero intero senza segno nella tua lingua.
- L'input è garantito per essere un semiprime.
- Questo è code-golf, quindi vince la risposta più breve in byte.
- Sono vietate le scappatoie standard.
Casi test
N | k | Output
-----------+------+------------
143 | 1 | [ 1, 1 ]
2519 | 19 | [ 1, 19 ]
199163 | 40 | [ 4, 10 ]
660713 | 1 | [ 1, 1 ]
4690243 | 45 | [ 9, 5 ]
11755703 | 80 | [ 40, 2 ]
35021027 | 287 | [ 7, 41 ]
75450611 | 429 | [ 143, 3 ]
806373439 | 176 | [ 8, 22 ]
1355814601 | 561 | [ 17, 33 ]
3626291857 | 77 | [ 7, 11 ]
6149223463 | 255 | [ 17, 15 ]
6330897721 | 3256 | [ 74, 44 ]
Esempio di implementazione
Nello snippet di seguito, la funzione è un'implementazione non golfata che accetta come input e restituisce e .N u v
Solo a scopo illustrativo, lo snippet include anche la funzione che accetta , e come input e calcola i fattori di in .N u v N O ( 1 )
N
sarà di fatto un semiprime?