Cod sursa(job #2183055)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 22 martie 2018 19:38:37
Problema Algoritmul lui Euclid Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 4.43 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mp make_pair
#define CHECK(x) if(!(x)) return false;
typedef pair<int, int> pii;

#ifdef INFOARENA
#define ProblemName "euclid2"
#endif

#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif

const int MAXBUF = 2000000;
char parseBuf[MAXBUF];
char *head;
bool isDigit[255];
char *writeHead;

void parseInit() {
  int a = fread(parseBuf, 1, MAXBUF, stdin);
  parseBuf[a] = 0;
  head = parseBuf;
  memset(isDigit, 0, sizeof isDigit);
  for (int i = '0'; i <= '9'; ++i)
    isDigit[i] = true;
  writeHead = head;
}

int nextInt() {
  int ans = 0;
  for (; !isDigit[*head]; ++head);
  for (; isDigit[*head]; ++head)
    ans = ans * 10 + (*head) - '0';
  return ans;
}

const char shit[] = "000100200300400500600700800900010110210310410510610710810910020120220320420520620720820920030130230330430530630730830930040140240340440540640740840940050150250350450550650750850950060160260360460560660760860960070170270370470570670770870970080180280380480580680780880980090190290390490590690790890990001101201301401501601701801901011111211311411511611711811911021121221321421521621721821921031131231331431531631731831931041141241341441541641741841941051151251351451551651751851951061161261361461561661761861961071171271371471571671771871971081181281381481581681781881981091191291391491591691791891991002102202302402502602702802902012112212312412512612712812912022122222322422522622722822922032132232332432532632732832932042142242342442542642742842942052152252352452552652752852952062162262362462562662762862962072172272372472572672772872972082182282382482582682782882982092192292392492592692792892992003103203303403503603703803903013113213313413513613713813913023123223323423523623723823923033133233333433533633733833933043143243343443543643743843943053153253353453553653753853953063163263363463563663763863963073173273373473573673773873973083183283383483583683783883983093193293393493593693793893993004104204304404504604704804904014114214314414514614714814914024124224324424524624724824924034134234334434534634734834934044144244344444544644744844944054154254354454554654754854954064164264364464564664764864964074174274374474574674774874974084184284384484584684784884984094194294394494594694794894994005105205305405505605705805905015115215315415515615715815915025125225325425525625725825925035135235335435535635735835935045145245345445545645745845945055155255355455555655755855955065165265365465565665765865965075175275375475575675775875975085185285385485585685785885985095195295395495595695795895995006106206306406506606706806906016116216316416516616716816916026126226326426526626726826926036136236336436536636736836936046146246346446546646746846946056156256356456556656756856956066166266366466566666766866966076176276376476576676776876976086186286386486586686786886986096196296396496596696796896996007107207307407507607707807907017117217317417517617717817917027127227327427527627727827927037137237337437537637737837937047147247347447547647747847947057157257357457557657757857957067167267367467567667767867967077177277377477577677777877977087187287387487587687787887987097197297397497597697797897997008108208308408508608708808908018118218318418518618718818918028128228328428528628728828928038138238338438538638738838938048148248348448548648748848948058158258358458558658758858958068168268368468568668768868968078178278378478578678778878978088188288388488588688788888988098198298398498598698798898998009109209309409509609709809909019119219319419519619719819919029129229329429529629729829929039139239339439539639739839939049149249349449549649749849949059159259359459559659759859959069169269369469569669769869969079179279379479579679779879979089189289389489589689789889989099199299399499599699799899999";

void putNumber(int x) {
  char *old = writeHead;
  while (x) {
    int rest = x % 1000;
    memcpy(writeHead, shit + rest * 3, 3);
    writeHead += 3;
    x /= 1000;
  }
  --writeHead;
  for (; *writeHead == '0'; --writeHead);
  ++writeHead;
  reverse(old, writeHead);
  *(writeHead++) = '\n';
}

int main() {
  freopen(InFile, "r", stdin);
  freopen(OuFile, "w", stdout);
  parseInit();
  int T = nextInt();
  while (T--) {
    int a = nextInt(), b = nextInt();
    putNumber(__gcd(a, b));
  }
  fwrite(parseBuf, 1, writeHead - parseBuf, stdout);
  return 0;
}