Pagini recente » Clasament oni_2016_10-ziua2 | Atasamentele paginii Labirint | Monitorul de evaluare | Cod sursa (job #3334790) | Cod sursa (job #3338305)
#include <bits/stdc++.h>
using namespace std;
static int mod_str(const string &s, int mod) {
int r = 0;
for (char ch : s) {
r = (r * 10 + (ch - '0')) % mod;
}
return r;
}
static int powmod(int a, int e, int mod) {
int r = 1 % mod;
a %= mod;
while (e > 0) {
if (e & 1) r = (r * a) % mod;
a = (a * a) % mod;
e >>= 1;
}
return r;
}
int main() {
ifstream fin("cifra.in");
ofstream fout("cifra.out");
int T;
if (!(fin >> T)) return 0;
vector<int> pref(21, 0);
for (int k = 1; k <= 20; ++k) {
int last = powmod(k % 10, k, 10);
pref[k] = (pref[k - 1] + last) % 10;
}
int sum20 = pref[20];
while (T--) {
string N;
fin >> N;
int r = mod_str(N, 20);
int s = mod_str(N, 200);
int qmod10 = s / 20; // since s in [0,199]
int ans = (sum20 * qmod10 + pref[r]) % 10;
fout << ans << '\n';
}
return 0;
}