Pagini recente » Cod sursa (job #537519) | Cod sursa (job #32756) | Cod sursa (job #1414717) | Borderou de evaluare (job #822182) | Cod sursa (job #854345)
Cod sursa(job #854345)
#include <cstdio>
#include <cstdlib>
#define mod 666013
int X , Y , Z , A , B , C , N , n ;
int M [ 4 ][ 4 ] , rez [ 4 ][ 4 ] , asd [ 4 ][ 4 ] ;
void copy ( int A [ ][ 4 ] , int B [ ][ 4 ] )
{
for ( int i = 0 ; i <= 2 ; i++ )
for ( int j = 0 ; j <= 2 ; j++ )
A [ i ][ j ] = B [ i ][ j ] ;
}
void mult ( int A [ ][ 4 ] , int B [ ][ 4 ] , int C [ ][ 4 ] )
{
for ( int i = 0 ; i <= 2 ; i++ )
for ( int j = 0 ; j <= 2 ; j++ )
A [ i ][ j ] = 0 ;
for ( int i = 0 ; i <= 2 ; i++ )
for ( int j = 0 ; j <= 2 ; j++ )
for ( int k = 0 ; k <= 2 ; k++ )
A [ i ][ j ] = ( A [ i ][ j ] + B [ i ][ k ] * C [ k ][ j ] ) % mod ;
}
void aaa ()
{
int aux [ 4 ][ 4 ] ;
M [ 0 ][ 0 ] = M [ 0 ][ 2 ] = M [ 1 ][ 0 ] = M [ 1 ][ 1 ] = 0 ;
M [ 0 ][ 1 ] = M [ 1 ][ 2 ] = 1 ;
M [ 2 ][ 0 ] = C ;
M [ 2 ][ 1 ] = B ;
M [ 2 ][ 2 ] = A ;
for ( int i = 0 ; i <= 2 ; i++ )
for ( int j = 0 ; j <= 2 ; j++ )
rez [ i ][ j ] = 0 ;
rez [ 1 ][ 1 ] = rez [ 2 ][ 2 ] = rez [ 0 ][ 0 ] = 1 ;
int p = N ;
while ( p )
{
if ( p & 1 )
{
mult ( aux , rez , M ) ;
copy ( rez , aux ) ;
}
p >>= 1;
mult ( aux , M , M ) ;
copy ( M , aux ) ;
}
}
int main ()
{
FILE *fin , *fout ;
fin = fopen ( "iepuri.in" , "rt" ) ;
fout = fopen ( "iepuri.out" , "wt" ) ;
fscanf ( fin , "%d" , &n ) ;
for ( int i = 1 ; i <= n ; i++ )
{
fscanf ( fin , "%d %d %d %d %d %d %d " , &X , &Y , &Z , &A , &B , &C , &N ) ;
printf ( "%d %d %d %d %d %d %d\n" , X , Y , Z , A , B , C , N ) ;
aaa () ;
fprintf ( fout , "%d\n" , X * rez [ 0 ][ 0 ] + Y * rez [ 0 ][ 1 ] + Z * rez [ 0 ][ 2 ] ) ;
}
fclose ( fin ) ;
fclose ( fout ) ;
return 0 ;
}