Pagini recente » Cod sursa (job #2965965) | Cod sursa (job #1069007) | Cod sursa (job #879269) | Cod sursa (job #1174237) | Cod sursa (job #1291965)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin( "ciuperci.in" );
ofstream fout( "ciuperci.out" );
typedef long long i64;
const int mod = 666013;
struct str{ i64 k, d; };
vector <str> h[ mod ];
inline str mp( i64 k, i64 d ) {
str sol;
sol.k = k; sol.d = d;
return sol;
}
i64 find_d( i64 k ) {
int key = k % mod;
for( int i = 0; i < ( int )h[ key ].size(); ++ i ) {
if ( h[ key ][ i ].k == k ) {
return h[ key ][ i ].d;
}
}
return -1;
}
i64 solve( i64 n ) {
i64 y, x = find_d( n );
if ( x != -1 ) {
return x;
}
int k = n / 2;
if ( n % 2 == 0 ) {
y = 2 * solve( k ) * solve( k - 1 );
y %= mod;
h[ n % mod ].push_back( mp( n, y ) );
return y;
} else {
y = solve( k );
y *= y;
y %= mod;
h[ n % mod ].push_back( mp( n, y ) );
return y;
}
}
int main() {
int t, x;
fin >> t;
h[ 1 ].push_back( mp( 1, 1 ) );
h[ 2 ].push_back( mp( 2, 2 ) );
while ( t -- ) {
fin >> x;
fout << solve( x ) << "\n";
}
fin.close();
fout.close();
return 0;
}