(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;
}
*
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
Trimiteți un comentariu