2013-09-03 14 views
6
#include <iostream> 
#include <cmath> 

int main(int argc, const char * argv[]) 
{  
    for (long i = 1; i > 0; i++) { 
     long n = i*i; 
     long x = n % 10; 
     long y = n/10 % 10; 

     if (x % 2 != 0 && y % 2 != 0) { 
      std::cout << i << std::endl; 
      std::cout << n << " " << n % 100 << " " << y << " " << x << std::endl; 
      std::cout << "Number Found: " << n << std::endl; 
      break; 
     } 
    } 

} 

-- RESULT -- 
3037000501 
-9223372030635300615 -15 -1 -5 
Number Found: -9223372030635300615 

Potrei sbagliarmi, ma credo che a lungo potrebbe non essere abbastanza grande da contenere la risposta. Qualcuno può confermare che il programma funzioni correttamente e che a lungo non sia possibile memorizzare il numero o che ci sia qualcosa che non va. O qualcosa di completamente diverso che ho perso.Programma per trovare e stampare il primo quadrato perfetto (i * i) le cui ultime due cifre sono entrambe dispari

Grazie

+2

Nota che devi solo provare numeri dispari. –

+0

duplicato - http://stackoverflow.com/questions/9349421/i-cant-figure-out-why-it-not-printing-the-first-perfect-square-with-the-last –

risposta

14

La mia impressione è che quel numero non esiste.

In effetti, è sufficiente cercare fino a i=50 perché i * i % 100 è ciclico con un periodo di esattamente 50. Quindi, l'intervallo di numeri non è il problema che si verifica.

Tutti i quadrati perfetti che hanno una cifra dispari nella sua penultima posizione terminano in 6 (16, 36, 196, 256, 576 e così via), che non è dispari. Il problema non ha soluzione. Non esiste una fine quadrata perfetta in due cifre dispari.

La ragione di questo ciclo è che qualsiasi numero può essere espresso come

n = a * 50 + b , with 0 <= b < 50. In fact, by definition b = n % 50 

E poi,

n^2 % 100 = 
    (a*50 + b)^2 % 100 = 
    ((a*50)^2 + 2*b*a*50 + b^2) % 100 = 
    (a*a*2500 + b*a*100 + b^2) % 100 = 
    b^2 % 100 = 
    (n % 50)^2 % 100 

In altre parole, le 2 cifre finali n^2 sarà la stessa di b^2, dove 0 < = b < 50, in particolare, b = n% 50.

In effetti, non è nemmeno necessario andare come r come 49, ma solo 25, come:

(50 - i)^2 % 100 = 
    (50^2 - 2*50*i + i^2) % 100 = 
    (2500 - 100*i + i^2) % 100 = 
    i^2 % 100 

In altre parole

50^2 %100 = (50- 0)^2 %100 = 0^2 %100 = 0 
    49^2 %100 = (50- 1)^2 %100 = 1^2 %100 = 1 
    48^2 %100 = (50- 2)^2 %100 = 2^2 %100 = 4 
     ... 
    27^2 %100 = (50-23)^2 %100 = 23^2 %100 = 29 
    26^2 %100 = (50-24)^2 %100 = 24^2 %100 = 76 
    25^2 %100 = (50-25)^2 %100 = 25^2 %100 = 25 
+0

Grazie, tutte le risposte erano grandi. Ti accetto perché sei il primo a rispondere al problema che non ha soluzione. –

+0

even * even è sempre uguale ... – JimR

4

Se ij (mod 100), allora i ² ≡ j ² (mod 100), quindi gli ultimi due valori hanno le stesse due cifre inferiori. Pertanto, è sufficiente controllare gli interi nell'intervallo [0, 99] e, poiché tutti i loro quadrati saranno nell'intervallo [0, 9801], tutto si adatterà comodamente agli interi ordinari. Ora, è in realtà una soluzione? In caso contrario, il ciclo continuerà a funzionare per sempre o fino allo i * i overflow, attivando un comportamento non definito.

+1

E sì, come notato da @MarioRossi, si può iniziare con la condizione più debole _i_ == _j_ (mod 50). –

+0

Grazie mi hai aiutato molto! –

4

Da quello che ho letto, è impossibile avere un tale evento. Ecco una risposta di Yahoo con un proof:

Quindi, diamo un'occhiata a questo: Ovviamente, le singole cifre misura il vostro osservazione 0^2 = 00, 1^2 = 01, 2^2 = 04, 3^2 = 09, 4^2 = 16, 5^2 = 25, 6^2 = 36, 7^2 = 49, 8^2 = 64, 9^2 = 81 Quindi, ci sono istanze dove entrambi i le ultime due cifre sono pari (specialmente se contiamo 0 come pari), e oltre 10, beh, 12^2 = 144 (due cifre pari) Ma NONE con 2 cifre dispari.

Pensiamo di un numero a due cifre come 10x + y, dove xey sono singoli cifra poi (10x + y)^2 = 100x^2 + 20xy + y^2 possiamo ignorare il 100 x^2, poiché ciò influenzerebbe solo la terza cifra. Per ottenere un'ultima cifra pari a , sappiamo che y^2 deve essere un numero dispari Se y < 4, il 20 xy deve essere anche dal 20 è SEMPRE uniforme, e quindi 20 xy deve essere pari. Poiché tutte le singole cifre dispari danno sempre una seconda cifra uniforme, quindi la seconda cifra deve essere pari.

Per tre o più cifre nel numero, possiamo ignorare la terza cifra, poiché ciò influenzerebbe solo la terza ultima cifra.

Quindi, non ci sono piazze con due cifre dispari come le ultime due numeri .... :-)

A seguito di tale prova, si può anche vedere che non importa il numero di cifre che si aggiunge al numero, quando al quadrato si otterrà sempre almeno una delle ultime 2 cifre pari.

+0

Grazie! la risposta di Yahoo ha davvero aiutato. –

1

Prima di tutto, è sufficiente controllare i numeri da 0 a 99, perché (100 + N)^2 ha le stesse ultime 2 cifre di N^2.

In secondo luogo, lasciare che il numero N di 2 cifre sia scritto come AB o, in altre parole, sia N = 10 * A + B, dove A e B sono numeri a 1 cifra. Quindi N^2 = 100 * A^2 + 20 * A * B + B^2. I primi due summiti sono chiaramente pari, quindi devi solo considerare numeri a 1 cifra.

terzo luogo, un quadrato di un numero pari è anche, in modo da avere solo controllare i numeri 1, 3, 5, 7 e 9.

Infine, elevando al quadrato a mano ciascuno dei suddetti cinque candidati si mostra facilmente che il numero richiesto non esiste.

1

Non c'è un tale numero. Diciamo che questo numero esiste. Quindi le ultime 2 cifre del quadrato sono determinate dalle ultime 2 cifre del numero. Supponiamo che le ultime 2 cifre siano x (10 ° posto) e y (1 ° posto). Quindi il numero può essere rappresentato come 10x + y. Quando prendiamo la piazza di questo otteniamo 100x.x + y.y + 20x.y

(10*x+y)(10*x+y) = 100*x*x + y*y + 20*x*y. 

Ora l'ultima cifra è determinata da y * y. Questo è possibile solo se y è dispari. L'ultima ma una cifra è determinata da 20 * x * y. Qualunque sia il valore di xey, questo è sempre pari. Quindi tutte le piazze hanno anche il 10 ° posto.

+0

Che dire di 4^2? y * y può portare un numero dispari nella posizione del decimo. L'affermazione "L'ultima ma una cifra è determinata da 20 * x * y" dovrebbe essere "La parità dell'ultima ma una cifra è determinata da (20 * x * y + y * y/10 * 10)/10% 2" (con/= divisione intera). Da lì, (2 * x * y + y * y/10)% 2 = y * y/10% 2, che può essere 0 (pari) o 1 (dispari) a seconda della parte 10 di y * y. IOW, anche per y = 0 (0), 1 (1), 2 (4), 3 (9), 5 (25), 7 (49), 8 (64) e 9 (81), e dispari per y = 4 (16) e 6 (36). –

Problemi correlati