コード例 #1
0
ファイル: blabal2.cpp プロジェクト: 0aps/Legacy-Code
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;
}
コード例 #2
0
ファイル: diofanto.c プロジェクト: jccarvalhosa/maratona
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;
}
コード例 #3
0
ファイル: ecc.c プロジェクト: rafaeldsantos/ECC
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;
}
コード例 #4
0
ファイル: ORDMAXMIN.CPP プロジェクト: pablinme/Proyectos
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[])
コード例 #5
0
ファイル: ecc.c プロジェクト: rafaeldsantos/ECC
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;
}
コード例 #6
0
ファイル: main.cpp プロジェクト: CCJY/coliru
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;
}