int p_capicua(int n) { int n1 = n; int cifra = cifras(n); if(cifra == 1 && n != 9)return n+1; //si es d una sola cifra int FR = n/rpow(10, cifra - cifra/2); //frontal int BR = n%rpow(10, cifra/2); //last-back int iFR = inverso(FR); if( iFR == BR) //palindromo { n = n+rpow(10, cifras(FR)); //le sumo el 10, 100, o 1000 FR = n/rpow(10, cifra - cifra/2); iFR = inverso(FR); //como cambio fr, hay q actualizarlo // } n = n-BR; //le resto la parte d atras n = n+iFR; //y la sustituyo por la de alante if(n1 > n) //si num viejo es mayor que el nuevo { //necesitamos el prox palindromo n = n+rpow(10, cifras(FR)); FR = n/rpow(10, cifra - cifra/2); iFR = inverso(FR); BR = n%rpow(10, cifra/2); n = n-BR; n = n+iFR; } return n; }
int main(){ memset(inv, 0, sizeof(inv)); int i, t, c, n, aux; for(i=1;i<10;i++) printf("%d\n",(inverso(i, MOD - 2))); fatorial[0] = 1; inv[0] = 1; for(i=1;i<1300031;i++){ if(inv[i] == 0){ aux = inverso(i, MOD - 2); inv[i] = aux; inv[aux] = i; } } for(i=1;i<2000001;i++) fatorial[i] = (long long)(fatorial[i-1] * i) % MOD; scanf("%d", &t); for(i=0;i<t;i++){ scanf("%d%d", &n, &c); n = n + c - 1; c = n - c; aux = (long long)(fatorial[n] * inv[fatorial[c]] * inv[fatorial[n - c]]) % MOD; printf("%d\n", aux); } return 0; }
ponto *soma_pontos(ponto *G,ponto *Q){ ponto *saida = (ponto*) malloc(sizeof(ponto)); bigint lambda, equa_parte_cima, equa_parte_baixo,inv_baixo; //lambda equa_parte_cima = (G->y - Q->y) % primo; equa_parte_baixo = (G->x - Q->x) % primo; if(equa_parte_baixo<0)equa_parte_baixo+=primo; inv_baixo = inverso(equa_parte_baixo,primo); lambda = equa_parte_cima*inv_baixo % primo; //calcula P(Xsaida, Ysaida) saida->x = ((lambda*lambda) - Q->x - G->x) % primo; saida->y = ( lambda*(Q->x - saida->x) - Q->y) % primo; //printf("lambda: %lld\n", lambda); if(saida->x < 0) saida->x+=primo; if(saida->y < 0) saida->y+=primo; return saida; }
void submenu(int value, int data[]) { char sino; do { clrscr(); printf("\n ----IMPRESION DE LOS DATOS----"); printf("\n\n '1'-- Mostrar los datos ingresados"); printf("\n\n '2'-- Ascendente"); printf("\n\n '3'-- Descendente"); printf("\n\n '4'-- maximo, minimo, suma, promedio, varianza"); printf("\n\n Ingresa 'S' para salir"); printf("\n\n Ingresa una opcion: "); scanf("%c", &sino); switch(sino) { case '1': mostrar(value, data); break; case '2': ordenado(value, data); break; case '3': inverso(value, data); break; case '4': otros(value, data); break; case 'S': sino = 's'; }//switch(sino) }while(sino != 's'); }//void submenu(int, int[])
ponto *dobro_ponto(ponto *G,bigint a){ ponto* saida = (ponto *)malloc(sizeof(ponto)); bigint equa_parte_cima, equa_parte_baixo,lambda; //descobre lambda equa_parte_cima = (3*(G->x*G->x)+a) % primo; equa_parte_baixo = (2*G->y) % primo; if(equa_parte_baixo<0)equa_parte_baixo+=primo; bigint inv_baixo = inverso(equa_parte_baixo, primo); lambda = (equa_parte_cima*inv_baixo) % primo; //calcula P(Xsaida, Ysaida) saida->x = ((lambda*lambda) - G->x - G->x) % primo; saida->y = (lambda*(G->x - saida->x) - G->y) % primo; //printf("saida-x : %lld saida-y %lld\n", saida->x,saida->y); if(saida->x < 0) saida->x+=primo; if(saida->y < 0) saida->y+=primo; return saida; }
int main() { double n, ris=0; char op; cout<<"ELENCO OPERAZIONI DISPONIBILI:\n"<<endl; cout<<"somma (+)"<<endl; cout<<"sottrazione (-)"<<endl; cout<<"prodotto (*)"<<endl; cout<<"divisione (/)"<<endl; cout<<"inverso di un numero (!)"<<endl; cout<<"potenza (^)"<<endl; cout<<"radice quadrata (R)"<<endl; cout<<"visualizzazione risultato (=)"<<endl; cout<<"\n\nPrimo numero: "; cin>>ris; while (op!='='){ cout<<"Operatore: "; cin>>op; switch (op) { case '+': cout<<"Secondo numero: "; cin>>n; ris=somma(ris,n); break; case '-': cout<<"Secondo numero: "; cin>>n; ris=sott(ris,n); break; case '*': cout<<"Secondo numero: "; cin>>n; ris=prodotto(ris,n); break; case '/': cout<<"Secondo numero: "; cin>>n; ris=divisione(ris,n); break; case '!': ris=inverso(ris); break; case '^': cout<<"Secondo numero: "; cin>>n; while(ris==0 && n<0){ cout<<"Errore! Reinserire il secondo numero (maggiore di 0)(In base alla scelta dei matematici): "; cin>>n; } ris=potenza(ris,n); break; case 'R': ris=radice(ris); break; case '=': cout<<ris<<endl; break; default: cout<<"operazione non possibile"<<endl; } } getchar(); return 0; }