Stran 1 od 1

Šifre

Objavljeno: Če Maj 18, 2017 12:42 pm
Napisal/-a lukazlatecan
Naša SOVA se mora boriti proti zunanjim in notranjim sovražnikom. Ena izmed zahtev tega boja je tudi ta, da s splošnim prisluškovanjem vsem državljanom prestreza teroristične komunikacije in razbija šifre nasprotnikov.

V Sloveniji se je pred kratkim pojavila teroristična skupina Kal Ajde, ki poskuša z uporabo dresiranih svinj preprečiti, da bi se pri nas upoštevale evropske direktive glede onesnaževanja zemlje in podtalnice z gnojili. Njihov vodja, Rastko Starić, ki ga išče tudi Haloški tribunal, za komunikacijo s svojimi podrejenimi uporablja poseben kod, ki ga moramo nujno razbiti!

Kod Kali Ajde je osnovan na naslednji formuli:
[math]
Pri tem sta a in b dela zasebnega ključa, c in d pa sestavljata javni ključ.

Vhodni podatki
Na vhodu dobite zaporedje parov števil c in d. Vemo, da je d praštevilo. Za c vemo, da je večje ali enako 0 ter manjše od d.

Vhodni podatki se zaključijo s parom c=0, d=0. Testnih primerov bo največ 10.

Omejitve vhodnih podatkov
  • 2 ≤ d ≤ 1000000
  • 0 ≤ c < d

Izhodni podatki
Izpišite najmanjši števili a (0 ≤ a ≤ d−1) in b (0 ≤ b ≤ d−1), ki ustrezata gornji enačbi (najprej naj bo čim manjši a, potem b). Če taki števili ne obstajata, izpišite niz "RESITVE NI IN NI".

Primer vhoda

Koda: Izberi vse

1 3
2 5
0 0

Pripadajoč izhod

Koda: Izberi vse

0 1
1 1

Re: Šifre

Objavljeno: Ne Jun 18, 2017 9:38 pm
Napisal/-a hinkopihpih

Koda: Izberi vse

import java.util.*;

public class Sifre
{
   public static void main(String[]args)
   {
      Scanner skan = new Scanner(System.in);
      long c = skan.nextLong();
      long d = skan.nextLong();

      while(d != 0)
      {
         boolean preveri = false;

         for(long a = 0; a < d; a++)
         {
            for(long b = a; b < d; b++)
            {
               long check = a * a + b * b;

               if((check % d) == c)
               {
                  preveri = true;
                  System.out.println(a + " " + b);
                  break;
               }   
            }   

            if(preveri)
            {
               break;
            }   
         }

         if(!preveri)
         {
            System.out.println("RESITVE NI PA NI");
         }   

         c = skan.nextLong();
         d = skan.nextLong();   
      }   
   }
}