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

Zadanie ze spoja:

Object Storage Arubacloud
0 głosów
559 wizyt
pytanie zadane 24 lipca 2018 w SPOJ przez ksareks Nowicjusz (140 p.)
zmienione kategorie 24 lipca 2018 przez ScriptyChris

Mam problem,
Długo rozwiązywałem zadanie na spoju: https://pl.spoj.com/problems/PA05_POT/ , które było wałkowane wiele razy. Mój sposób to sprawdzanie po kolei jakie są ostatnie cyfry liczby potęgowanej i dopasowywanie do podanej potęgi. W programie działa wszystko, łącznie z 1000000 do potęgi 1000000, ale spoj nie akceptuje mojego wyniku, jakbym program się nie kończył.

Kod:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int potega(int a, int b)
{
    if(b==0)  //jeśli potęga podnoszona jest do potegi 0, wynik zawsze to 1
        return 1;
    vector <int> wyniki;// stowrzenie Vectora,który będzie zapisywał kolejne ostatnie cyfry liczby podnoszonej do potęgi

     int c=a%10; //liczba c jest ostatnią cyfrą potęgi podanej liczby do potegi pierwszej
    int x; // x będzie przyjmowało każda kolejna ostatnia cyfra liczby podnoszonej do potegi
    int ktory;//ktory przechowuje ktora liczba w tablicy ma pokazac
    int d=2;//pierwszy wykladnik potegi, zwiekszany w klamrze o 1
    wyniki.push_back(c);//dodanie pierwszej cyfry do "tablicy"
    while(x!=c) //jesli obliczona cyfra bedzie taka sama jak pierwsza, petla się zakończy
    {
        unsigned long long xyz;// xyz jest liczbą podniesioną do potęgi
        xyz=pow(a,d);
     x=(xyz%10);//obliczanie ostatniej cyfry liczby podniesionej do potęgi 
     wyniki.push_back(x);//dodanie liczby x do tablicy 
     d++;//inkrementacja wykłądnika
    }
    wyniki.pop_back();//usuniecie ostatniej liczby(jest taka sama jak pierwsza)

        ktory=b%wyniki.size();(obliczanie ile liczb jest w "tablicy"

    if(wyniki.size()==1)//jesli dlugosv tablicy jest rowna 1, zwroci jedyna liczbe
        return c;
    if(ktory==0) // jesli
    return wyniki[0];
    else
        return wyniki[ktory-1];
}

int main()
{
    int d;
    cin>>d;
    for(int i=1;i<=d;i++)
    {
        int a,b;
        cin>>a>>b;
        cout<<potega(a,b)<<endl;
    }
    return 0;
}

Z góry dziękuje za wszystkie porady !

komentarz 24 lipca 2018 przez Mariusz08 Maniak (62,300 p.)

1. Temat był wałkowany wiele razy - nie korzystaj z funkcji pow() i rozpisz sobie na kartce 8 pierwszych potęg każdej liczby 2-9 i zauważ pewną zależność. 

2. Przenieś swój temat do kategorii SPOJ.

komentarz 24 lipca 2018 przez ksareks Nowicjusz (140 p.)
ale nie przy takim korzystaniu z funkcji pow() nie wychodzę poza zakres liczby, i w tym programie korzystam z tej zależności
komentarz 24 lipca 2018 przez j23 Mędrzec (194,920 p.)
Hint: szybkie potęgowanie modularne.
komentarz 24 lipca 2018 przez ksareks Nowicjusz (140 p.)
Dzięki, ale czemu taka metoda jest nieodpowiednia?
komentarz 24 lipca 2018 przez j23 Mędrzec (194,920 p.)
Może twój kod czasowo nie wyrabia, albo operuje na zbyt dużych liczbach.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
2 odpowiedzi 1,061 wizyt
0 głosów
3 odpowiedzi 372 wizyt
pytanie zadane 11 marca 2020 w SPOJ przez Sashimo Użytkownik (740 p.)
+1 głos
1 odpowiedź 1,990 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...