• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z zdaniem Czy umiesz potegowac w Javie

Object Storage Arubacloud
+2 głosów
201 wizyt
pytanie zadane 12 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)

Siema,

Mam problem z zadaniem Czy umiesz potęgować w Javie, moim zdaniem powinno być wszystko ok, ale sędzia ze SPOJa się ze mną nie zgadza. Mógłby mi ktoś pomóc w znalezieniu błedu?

link do zadania:

https://pl.spoj.com/problems/PA05_POT/

import java.util.Scanner;
import java.lang.Math;

class Czy_umiesz_potegowac
{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int D = input.nextInt();
        for(int i=0;i<D;i++)
        {
            double a = input.nextDouble();
            double b = input.nextDouble();
            double Exponent = b % 4 == 0 ? 4 : b % 4;
            double Result = Math.pow(a,Exponent);
            System.out.println((int)Result %10);
        }
        input.close();
    }
}

 

komentarz 12 marca 2023 przez Great Stary wyjadacz (12,360 p.)
Nie jestem pewien, ale chyba niepotrzebnie liczyć potęgę z całej liczby a.
1
komentarz 12 marca 2023 przez Oscar Nałogowiec (29,320 p.)
W zadaniu są liczby z ograniczeniem do miliarda. Ogólnie chodzi by takiej potęgi nie liczyć, zauważyć, że w iloczynie dwóch liczb, ostatnia cyfra jest iloczynem ostatnich cyfr czynników. Nie wchodzi tam jeszcze żadne przeniesienie. I potem trzeba rozszerzyć to na potęgowanie. Zadanie w sumie bardziej matematyczne niż informatyczne.

1 odpowiedź

+2 głosów
odpowiedź 12 marca 2023 przez Wiciorny Ekspert (271,710 p.)

Sprawdź sobie takie podejście do problemu
Można obliczyć ostatnią cyfrę potęgi liczby a, znajdując ostatnie cyfry a^1, a^2, a^3, a^4 i wykorzystując ich iloczyn modulo 10. Można zastosować zasadę cyklu modulo 4, która mówi, że ostatnia cyfra a^n jest taka sama jak ostatnia cyfra a^(n modulo 4), jeśli a jest liczbą naturalną większą niż 0.
 

   for(int i=0;i<D;i++)
        {
            int a = input.nextInt() % 10;
            int b = input.nextInt() % 4;
            if (b == 0) {
                b = 4;
            }
            int result = 1;
            for (int j = 0; j < b; j++) {
                result = (result * a) % 10;
            }
            System.out.println(result);
        }

Dzieki modulo 10, otrzymasz ostatnią cyfrę liczby, a przez modulo 4, wyznaczasz potęgę, dla której obliczona zostaje ostatnia cyfra.

1
komentarz 12 marca 2023 przez skyynet Początkujący (410 p.)
Faktycznie modulo 10 z pierwszej liczby załatwiło sprawę, bardzo dziękuję za pomoc

Podobne pytania

0 głosów
1 odpowiedź 173 wizyt
0 głosów
1 odpowiedź 181 wizyt
pytanie zadane 2 grudnia 2016 w C i C++ przez wojownikpoeta Nowicjusz (140 p.)
0 głosów
3 odpowiedzi 389 wizyt
pytanie zadane 24 lutego 2017 w SPOJ przez Mateusz K Nowicjusz (150 p.)

92,666 zapytań

141,564 odpowiedzi

320,019 komentarzy

62,032 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...