2013-09-03 8 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 

Mogę się mylić, ale uważam, że długo może nie być wystarczająco duży, aby zapisać odpowiedź. Czy ktoś może potwierdzić, że program działa poprawnie i długo nie może zapisać numeru, czy coś jest nie tak, czego mi brakuje. Albo coś zupełnie innego, co przeoczyłem.Program do wyszukania i wydrukowania pierwszego idealnego kwadratu (i * i), którego dwie ostatnie cyfry są nieparzyste.

Dzięki

+2

Pamiętaj, że musisz wypróbować tylko liczby nieparzyste. –

+0

duplikat - http://stackoverflow.com/questions/9349421-i-antant-figure-out-whyi-its-not-printing-first-perfect-square-with-the-last –

Odpowiedz

14

Mam wrażenie, że ta liczba nie istnieje.

Skutecznie, wystarczy spojrzeć w górę na i=50, ponieważ i * i % 100 ma charakter cykliczny, a czas wynosi dokładnie 50. Tak więc zakres liczb nie jest problemem, którego doświadczasz.

Wszystkie idealne kwadraty z nieparzystą cyfrą w ostatniej pozycji kończą się w 6 (16, 36, 196, 256, 576 itd.), Co nie jest nieparzyste. Problem nie ma rozwiązania. Nie ma idealnego kwadratu zakończonego dwoma nieparzystymi cyframi.

Powodem tego cyklu jest to, że każdy numer może być wyrażona jako

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

a następnie,

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 

Innymi słowy, ostateczna cyfry n^2 2 będzie taka sama jak b^2, gdzie 0 < = b < 50, konkretnie, b = n% 50.

W rzeczywistości, nie musisz nawet iść jako fa R, jak 49, ale tylko 25, jak:

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

Innymi słowy

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

Dziękuję, wszystkie odpowiedzi były świetne. Akceptuję twoje, ponieważ ty, gdzie pierwszy odpowiedziałeś, nie ma rozwiązania. –

+0

nawet * nawet zawsze jest ... – JimR

4

Jeśli iJ (model 100), a następnie i ² ≡ J ² (mod 100), stąd te dwie ostatnie wartości mają te same dolne dwie cyfry. Dlatego musisz tylko sprawdzić liczby całkowite w zakresie [0, 99] i, jako że wszystkie ich kwadraty będą w zakresie [0, 9801], wszystko zmieści się wygodnie w zwykłych liczbach całkowitych. Teraz, jest rzeczywiście istnieje rozwiązanie? Jeśli tak nie jest, twoja pętla będzie działać wiecznie lub do momentu przepełnienia i * i, powodując niezdefiniowane zachowanie.

+1

I tak, jak zauważył @MarioRossi, można zacząć od słabszego warunku _i_ == _j_ (mod 50). –

+0

Dziękuję, bardzo mi pomogłeś! –

4

Z tego, co czytałem, niemożliwe jest takie zdarzenie. Oto odpowiedź Yahoo z proof:

Więc spójrzmy na to: Oczywiście, pojedyncze cyfry dopasować swój obserwacja 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 Są więc przypadki , gdzie zarówno ostatnie dwie cyfry są parzyste (szczególnie, że liczymy 0 jako ), a poza 10, no, 12^2 = 144 (dwie cyfry parzyste), ale BRAK z 2 cyframi nieparzystymi.

Pomyślmy o liczbie dwucyfrowej jako 10x + Y, gdzie X i Y są pojedyncze cyfry następnie (10x + y)^2 = 100x^2 + 20xy + y^2 Możemy ignorować 100 x^2, ponieważ wpłynęłoby to tylko na trzecią cyfrę. Aby uzyskać nieparzystą ostatnią cyfrę, wiemy, że y^2 musi być liczbą nieparzystą Jeśli y < 4, 20 xy musi być równy, ponieważ 20 jest ZAWSZE równomierne, a zatem 20 xy musi być parzyste. Ponieważ wszystkie pojedyncze cyfry nieparzyste zawsze dają parzystą drugą cyfrę, to druga cyfra musi być parzysta.

W przypadku trzech lub więcej cyfr w liczbie możemy zignorować trzecią cyfrę, , ponieważ wpłynie to tylko na trzecią ostatnią cyfrę.

Więc nie ma kwadraty z dwóch nieparzystych cyfr jak w ostatnich dwóch liczb .... :-)

następstwie tego dowodu, można również zauważyć, że bez względu na liczbę cyfr dodać do liczby, jeśli zostanie podniesiona do kwadratu, zawsze co najmniej jedna z ostatnich 2 cyfr będzie równa.

+0

Dziękujemy! odpowiedź yahoo naprawdę pomogła. –

1

Przede wszystkim wystarczy sprawdzić cyfry od 0 do 99, ponieważ (100 + N)^2 ma te same 2 ostatnie cyfry co N^2.

Po drugie, niech twoja dwucyfrowi liczba N będzie zapisana jako AB, lub innymi słowy niech N = 10 * A + B, gdzie A i B są liczbami jednocyfrowymi. Następnie N^2 = 100 * A^2 + 20 * A * B + B^2. Pierwsze dwa elementy są wyraźnie równe, więc musisz wziąć pod uwagę tylko cyfry jednocyfrowe.

trzecie, kwadratem liczby parzystej jest parzysta, więc trzeba tylko sprawdzić numery 1, 3, 5, 7 i 9.

Wreszcie kwadratury ręcznie każdego z powyższych pięciu kandydatów ty łatwo pokazać, że żądany numer nie istnieje.

1

Nie ma takiej liczby. Powiedzmy, że taka liczba istnieje. Następnie ostatnie 2 cyfry kwadratu określają ostatnie 2 cyfry numeru. Załóżmy, że ostatnie 2 cyfry to x (10 miejsce) i y (1 miejsce). Tak więc liczba może być przedstawiona jako 10x + y. Gdy weźmiemy kwadratu to dostaniemy 100x.x + y.y + 20x.y

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

Teraz ostatnia cyfra jest określona przez y * y. Jest to możliwe tylko wtedy, gdy y jest nieparzyste. Ostatnia, lecz jedna cyfra jest określona przez 20 * x * y. Cokolwiek ma wartość x i y, zawsze jest równe. Więc wszystkie kwadraty mają nawet 10. miejsce.

+0

Co z 4^2? y * y może przenieść nieparzystą liczbę na pozycję dziesiątą. Instrukcja "Ostatnia, lecz jedna cyfra jest określona przez 20 * x * y" powinna być "Parytet ostatniej, ale jednej cyfry jest określony przez (20 * x * y + y * y/10 * 10)/10% 2" (z/= całkowitym dzieleniem). Stamtąd (2 * x * y + y * y/10)% 2 = y * y/10% 2, które mogą wynosić 0 (parzyste) lub 1 (nieparzyste) w zależności od dziesiątej części y * y. IOW, nawet dla y = 0 (0), 1 (1), 2 (4), 3 (9), 5 (25), 7 (49), 8 (64) i 9 (81), i nieparzystych dla y = 4 (16) i 6 (36). –

Powiązane problemy