o Teorema Chinês do Restante nos diz que sempre podemos encontrar um número que produz quaisquer restos necessários sob diferentes módulos primos. Seu objetivo é escrever código para gerar esse número em tempo polinomial. O menor código vence.
Por exemplo, digamos que recebemos essas restrições ( %representa mod):
n % 7 == 2
n % 5 == 4
n % 11 == 0
Uma solução é n=44. A primeira restrição é satisfeita porque 44 = 6*7 + 2, e assim 44tem o restante 2quando dividido por 7, e assim 44 % 7 == 2. As outras duas restrições também são atendidas. Existem outras soluções, como n=814e n=-341.
Entrada
Uma lista não vazia de pares (p_i,a_i), em que cada módulo p_ié um primo distinto e cada destino a_ié um número natural no intervalo 0 <= a_i < p_i. Você pode receber informações da forma que for mais conveniente; não precisa ser realmente uma lista de pares. Você não pode assumir que a entrada está classificada.
Saída
Um número inteiro ntal que n % p_i == a_ipara cada índice i. Ele não precisa ser o menor valor possível e pode ser negativo.
Restrição de tempo polinomial
Para evitar soluções baratas que apenas tentar n=0, n=1, n=2, e assim por diante, seu código deve ser executado em tempo polinomial no comprimento da entrada . Observe que um número mna entrada possui comprimento Θ(log m); portanto, mele não é polinomial em seu comprimento. Isso significa que você não pode contar até mou executar um mtempo de operação , mas pode calcular operações aritméticas nos valores.
Você não pode usar um formato de entrada ineficiente como unário para contornar isso.
Outras proibições
Não são permitidos embutidos para fazer o seguinte: Implemente o teorema chinês Remainder, resolva equações ou números de fatores.
Você pode usar built-ins para encontrar mods e fazer adição, subtração, multiplicação e exponenciação modulares (com expoente de número natural). Você não pode usar outras operações modulares integradas, incluindo inversa modular, divisão e busca de pedidos.
Casos de teste
Estes fornecem a menor solução não negativa. Sua resposta pode ser diferente. Provavelmente é melhor se você verificar diretamente se sua saída satisfaz cada restrição.
[(5, 3)]
3
[(7, 2), (5, 4), (11, 0)]
44
[(5, 1), (73, 4), (59, 30), (701, 53), (139, 112)]
1770977011
[(982451653, 778102454), (452930477, 133039003)]
68121500720666070