int main( int argc, char**argv){ if(2 != argc){ printf("Nombre de paramètres insuffisants\n"); return 1; } int number = atoi( argv[1] ); int i, length = get_count( number), x, y; for( i = 0; i < length/2; i++) { x = get_at_index( number, i, length ); y = get_at_index( number, length-i-1, length ); //printf("x=>%d y=>%d", x,y); if( x != y ){ printf("0 \n"); return 0; } } printf("1 \n"); return 0; }
Matrix & Matrix::diagonalize(int rotations_count, /*out*/ Matrix & transformation, Real precision /*=DEFAULT_REAL_PRECISION*/) { static const size_t OFF_DIAGONAL_ITEMS_COUNT = VECTOR_SIZE*(VECTOR_SIZE - 1)/2; static const int off_diagonal_items[OFF_DIAGONAL_ITEMS_COUNT] = { element_index(0,1), element_index(0,2), element_index(1, 2) }; transformation = Matrix::IDENTITY; for (int iter = 0; iter < rotations_count; ++iter) { Real max = -1; for (int i = 0; i < OFF_DIAGONAL_ITEMS_COUNT; ++i) { Real a = fabs(get_at_index(off_diagonal_items[i])); if (max < 0 || a > max) { max = a; } } if (less_or_equal(max, 0, precision)) { return *this; } do_jacobi_rotation((iter + 1) % VECTOR_SIZE, (iter + 2) % VECTOR_SIZE, transformation); } return *this; }