Cao Chong congruencia cerdo -------

Desde Cao Chong para conseguir el elefante después de Cao Cao se preguntó a su hijo a hacer algo de negocio, entonces lo envió a las granjas de cerdos central Plains, pero Cao Chong no es feliz, entonces regular, en el trabajo, una vez que Cao Cao quería saber el número de cerdas , por lo que Cao Cao Chong le gustaría jugar una ferocidad. Por ejemplo, si hay 1.616

Las cerdas, si la construcción de 33

Una pocilga, y los 11 restantes

No hay lugar para establecerse un cerdo; si se construye 55

Una pocilga, pero todavía hay 11

Los cerdos tienen ningún lugar a donde ir; si se construye 77

Una pocilga, hay 22

La cabeza sin lugar a donde ir. Usted da Cao, ¿cómo se puede hacer como secretario privado en general Cao, por supuesto, desea informar con precisión el número de cerdos? El formato de entrada de la primera fila contiene un número entero nn

Indica el número de la creación de la pocilga, junto nn

Líneas de dos enteros ai, Biai, bi

Que indica el establecimiento de un aiai

Una pocilga, no bibi

Cerdos sin lugar para ir. Se puede suponer que la IA, ajai, AJ

Primos entre sí. Formato de salida de la salida contiene sólo un número entero positivo, es decir, el número de la al menos Cao Chong cerdo. Rango de datos 1≤n≤101≤n≤10

,
1≤bi≤ai≤11000001≤bi≤ai≤1100000

Todo aiai

El producto no es más de 10.181.018

de entrada de la muestra: 3
. 3. 1
5. 1.
7.

Ideas: Perfecto para aplicar el teorema chino del resto, a continuación, prestar atención porque desea dar salida a un mínimo, por lo que el módulo M

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 10;
int n;
int A[N], B[N];
void exgcd(LL a, LL b, LL &x, LL &y){
 if (!b)   x = 1, y = 0;
 else{
  exgcd(b, a % b, y, x);
  y -= a / b * x;
 }
} 
int main(){
 scanf("%d", &n);
 LL M = 1;
  for (int i = 0; i < n; i ++){
  scanf("%d%d", &A[i], &B[i]);
  M *= A[i];
 }
  LL res = 0;
 for (int i = 0; i < n ; i ++){
  LL Mi;
   Mi = M / A[i];
   LL ti, x;
   exgcd(Mi, A[i], ti, x);
   res += B[i] * Mi * ti;
 }
  cout << (res % M + M) % M << endl;
  return 0;
}
106 artículos originales publicados · ganado elogios 67 · vistas 5416

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/105028059
Recomendado
Clasificación