(Pauză la progres) Palindroame și numere campioane, cu GMP

Cod-sursă pentru numerele naturale palindrom și, respectiv, număr-campion.

 *
I. PALINDROMUL

#include <gmp.h>
#include <stdio.h>

int PAL(mpz_t a, char *Y) {
    mpz_get_str(Y, a, 10);
    int l = strlen(Y), l1 = (l>>1);
   
    for(int i = 0; i < l1; i++)
    if(Y[i] ^ Y[l-i-1]
        return 0;
   
    return 1;
}

void REV(mpz_t a, char *Y, mpz_t b) {
mpz_set_ui(b, 0);
mpz_get_str(Y, a, 10);
int l = strlen(Y);

for(int i = l-1; i >= 0; i--) {
    mpz_mul_ui(b, b, 10);
    mpz_add_ui(b, b, (int)(Y[i] - 48));
    }
}

int main(int argc, char **argv) {
    mpz_t a, b;
    mpz_inits(a, b, NULL);
    char Y[100000];
    int t = 0;
   
    printf("Numărul de origine: ");
    gmp_scanf("%Zd", a);
   
    for(; t < 10; t++) {
        REV(a, Y, b);
        mpz_add(a, a, b);
        gmp_printf("%Zd\n", a);
       
        if(PAL(a, Y)) {
            gmp_printf("%Zd e un palindrom.\n\n", a);
            break;
        }
    }
   
return 0;
}



*
II. CAMPIONUL
 
#include <gmp.h>
#include <stdio.h>

int main(int argc, char **argv) {
mpz_t a;
int i = 0;

printf("Numărul de origine: ");
gmp_scanf("%Zd", a);

for(; i < 30; i++) {
    if(!mpz_scan1(a, 0)) {
        mpz_mul_ui(a, a, 3);
        mpz_add_ui(a, a, 1);
    } else {
        mpz_tdiv_q_2exp(a, a, 1);
    }
   
    gmp_printf("%Zd\n", a);
   
    if(!mpz_cmp_ui(a, 1)) {
        gmp_printf("%Zd este un campion de număr.\n\n", a);
        break;
        }
    }

return 0;
}

Comentarii

Postări populare