Cod sursa(job #2134494)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 17 februarie 2018 23:51:00
Problema Ciuperci Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <bits/stdc++.h>
#define LIM 100000

const long long MOD = 666013;
long long d[1 + LIM];
long long D(long long n){
    if(n <= 1) return 1;
    if(n > LIM){
        if(n % 2){long long x = D(n / 2); return (x * x) % MOD;}
        else return (2 * D(n / 2) * D(n / 2 - 1)) % MOD;
    }
    if(d[n] != -1) return d[n];
    if(n % 2){long long x = D(n / 2); d[n] = (x * x) % MOD;}
    else d[n] = (2 * D(n / 2) * D(n / 2 - 1)) % MOD;
    return d[n];
}

int main(){
    FILE*fi,*fo;
    fi = fopen("ciuperci.in","r");
    fo = fopen("ciuperci.out","w");

    int n;
    fscanf(fi,"%d", &n);
    for(int i = 0; i <= LIM; i++) d[i] = -1;
    for(int i = 1; i <= n; i++){
        long long x;
        fscanf(fi,"%lld", &x);
        fprintf(fo,"%lld\n", D(x));
    }

    return 0;
}