DESENV. E IMPLEMENTAÇÃO DE ALGORITMOS – 11/04/2015 Este caderno contém 11 páginas com a descrição de 10 problemas definidos a seguir: A – Fatores e fatoriais (Factors and Factorials - Valladolid 160) B – Divisores (Divisors - Valladolid 294) C – Fatores Primos (Prime Factors - Valladolid 583) D - Problema de Euclides (Valladolid 10104) E - Relativos (Relatives - Valladolid 10299) F – Contando DePrimos (Count DePrimes - Valladolid 11408) G – Maior divisor primo (Largest prime divisor - Valladolid 11466) H – Benefício (Benefit - Valladolid 11889) I- Estrelas (Valladolid 12493) J - Prime Gap (Valladolid 1644) 1. Os alunos podem trabalhar em grupos de 2, usando um micro apenas. 2. Alguns dos problemas são do site da Universidade de Valladolid. 3. Pode ser consultado qualquer material escrito. Não se pode usar pen-drives nem Internet na aula, a menos que seja expressamente permitido pelo professor. 4. Os problemas serão posteriormente checados para verificar sua originalidade. 5. O critério de avaliação está na página da discilina. 6. As linguagens permitidas são: Pascal, C, C++. JAVA. 7. Usaremos o site do Valladolid submissão e correção dos problemas e os alunos de cada dupla devem submeter os problemas certos. 8. Resolver e programar com calma. Boa sorte. Problema A (Valladolid 160) Factors and Factorials O fatorial de um número N(escrevendo-se N!) é definido como o produto dos inteiros de 1 a N. Fatoriais crescem muito rapidamente (5! = 120; 10! = 3628800). Uma forma de especificar números tão grandes é indicando o número de vezes que cada primo ocorre no fatorial. Por exemplo, 825 pode ser expresso como (0 1 2 0 1) significando nenhum 2, 1 três, 2 cincos, nenhum sete e 1 onze. Escreva um programa que lê um número N (2 ≤ N ≤ 100) e expressa seu fatorial em termos do número de primos que contém. Entrada A entrada consistirá de uma série de linhas, cada uma contendo um inteiro N. O final da entrada é uma linha contendo 0. Saída Para cada entrada escreva uma linha contendo: o número N, justificado à direita com tamanho 3, os caracteres '! =', seguidos por uma lista com o número de vezes que cada primo ocorre em N!. Esses valores devem ser justificados a direita com tamanho 3, com no máximo 15 em uma linha e, se houver necessidade de mais de uma linha, essa deve ser identada. Veja o exemplo. Exemplo de Entrada 5 53 0 Saída para o Exemplo de Entrada 5! = 3 1 1 53! = 49 23 12 1 8 4 4 3 2 2 1 1 1 1 1 1 Problema B (Valladolid 294) Divisores Os matemáticos adoram todo o tipo de propriedade estranha dos números. Por exemplo, eles consideram 945 um número interessante, uma vez que que ele é o primeiro número ímpar para o qual a soma dos seus divisores é maior que o próprio número. Visando ajudá-los a procurar números interessantes, você vai escrever um programa que varre uma faixa de números e determina o número que tenha a maior quantidade de divisores. Infelizmente, o tamanho dos números e da faixa é tal que um enfoque simplista leva muito tempo para rodar. Então, tenha certeza que seu algoritmo seja esperto o suficiente para tratar a maior faixa em poucos segundos. Entrada A primeira linha da entrada especifica o número N de faixas. Cada uma das N linhas seguintes contém uma faixa, consistindo de um limite inferior L e um limite superior U, onde L e U estão incluídos na faixa. L e U são escolhidos tal que 1 ≤ L ≤ U ≤ 1000000000 e 0 ≤ U - L ≤ 10000. Saída Para cada faixa, encontre o número P que tem a maior quantidade de divisores (se existir mais de um, selecione o menor), e o número de divisores positivos D de P (incluir P como um divisor). Imprima 'Between L and U, P has a maximum of D divisors.', divisors.' onde L, U, P, e D são os números como definidos acima. Exemplo de Entrada 3 1 10 1000 1000 999999900 1000000000 Exemplo de Saída Between 1 and 10, 6 has a maximum of 4 divisors. Between 1000 and 1000, 1000 has a maximum of 16 divisors. Between 999999900 and 1000000000, 999999924 has a maximum of 192 divisors. Problema C (Valladolid 583) Fatores Primos O Dicionário Webster define número primo como: prime (prim) n.[ME, fr. MF, fem. of prin first, L primus; akin to L prior] 1 :first in time: original 2 a : having no factor except itself and one (3 is a number) b : having no common factor except one ( 12 and 25 are relatively ) 3 a : first in rank, authority or significance : principal b : having the highest quality or value ( television time) [from Webster's New Collegiate Dictionary] A definição mais relevante para este problema é a 2a: um inteiro g > 1 é primo se e somente se seus únicos divisores positivos são ele mesmo e 1 (caso contrário ele é dito composto). Por exemplo, o número 21 é composto; o número 23 é primo. Note a decomposição de um inteiro positivo sitive number g em seus fatores primos, i.e., g = f1 x f2 x .... x fn é única se temos fi > 1 para todo i e fi ≤ fj para i<j. Uma classe interessante de primos é chamada de primos de Mersenne, que são da forma 2p- 1. Euler provou que 231 - 1 é primo, em 1772. (sem usar computador). Entrada A entrada consiste de uma sequência de números. Cada linha da entrada conterá um número g na faixa -231 < g <231, mas diferentes de -1 e 1. O fim da entrada será indicado por uma linha de entrada contendo 0. Saída Para cada linha de entrada, seu programa deve imprimir uma linha consistindo da entrada e seus fatores primos. Para uma entrada g > 0 = f1 x f2 x ... x fn , onde cada fi é um primo maior que 1 (com fi ≤ fj para i<j), o formato de saída é: Quando g < 0, se |g| = f1 x f2 x ... x fn, o formato de saída é: Exemplo de entrada -191 -192 195 197 200 0 Exemplo de Saída -191 = -1 -192 = -1 -195 = -1 197 = 197 200 = 2 x x 191 x 2 x 2 x 2 x 2 x 2 x 2 x 3 x 3 x 5 x 13 2 x 2 x 5 x 5 Problema D (Valladolid 10104) Problema de Euclides O Problema Sabe-se, a partir de Euclides, que, para dois inteiros positivos A e B existem os inteiros X e Y tal que AX+BY=D, onde D é o maximo divisor comum de A e B. O problema é encontrar X, Y and D , dados A e B. Entrada A entrada consiste de um conjunto de linhas com os números inteiros A e B, separados por espaço (A,B<1000000001). Saída Para cada linha de entrada, a saída deve conter três inteiros X, Y e D, separados por espaço. Se houver vários X e Y, você deve imprimir o par para o qual |X|+|Y| é mínimo, primariamente e X<=Y (secundariamente). Exemplo de entrada 4 6 17 17 Exemplo de Saída -1 1 2 0 1 17 Problema E (Valladolid 10299) Relativos Dado n, um inteiro positivo, quantos positivos inteiros menores que n são relativamente primos a n? Dois inteiros a e b são relativamente primos entre sí se não há inteiros x > 1, y > 0, z > 0 tal que a = xy e b = xz. Entrada e Saída Haverá vários casos de teste. Para cada um deles, a entrada conterá uma linha com n <= 1,000,000,000. Uma linha contendo 0 segue o último caso de teste. Para cada caso de teste deve ser impressa uma linha respondendo a questão colocada acima. Exemplo de Entrada 7 12 0 Exemplo de Saída 6 4 Problema F (Valladolid 11408) Contando DePrimos Um número é DePrimo se a soma de seus fatores primos é um número primo. Por exemplo, o número 10 é De Primo, pois seus fatores primos são 2 e 5 e sua soma é 7, um número primo. Dados a e b, conte o número de DePrimos x, tal que a ≤ x ≤ b. Entrada Cada linha de entrada contém dois inteiros a e b, 2 ≤ a ≤ 500000, a ≤ b ≤ 500000. O fim da entrada é uma linha contendo 0. Saída Para cada caso de teste, o programa deve mostrar uma linha contendo o número de DePrimos para o intervalo dado. Exemplo de Entrada 2 5 10 21 100 120 0 Exemplo de saída 4 9 9 Problema G (Valladolid 11466) Maior divisor primo Todos os inteiros são divisiveis por algum primo. Se um número é divisível por vários primos, então existe um maior desses fatores. Os números que não têm mais de um divisor não caem na categoria considerada. Dado um número n, seu problema é escrever um programa que encontre seu maior divisor primo. Entrada A entrada consiste de no máximo 450 testes. Cada linha de entrada contém um número N, que não tem mais de 14 dígitos. O fim da entrada é uma linha contendo 0. Essa linha não deve ser processada. Saída Para cada caso de teste, o programa deve mostrar uma linha com o MDP, o maior divisor primo. Se a entrada não é divisível por mais de um primo, então escreva -1. Exemplo de Entrada 2 6 100 0 Exemplo de saída -1 3 5 Problema H (Valladolid 11889) Benefício Yaghoub tem um truque para vender mais. Quando alguém lhe paga com A reais, ele diz que não tem troco e pede mais B reais, tal que o menor múltiplo comum entre A e B é C, e aí ele paga a diferença em uma nota inteira. Ou então a pessoa pode tomar um lanche relativa à diferença de troco. Ele acredita que é muito difícil para os alunos acharem o valor B e então eles vão preferir consumir mais. Você deve ajudar os estudantes pobres, para calcular o valor pedido por Yaghoub. Claro que pode haver vários valores, mas você deve achar o menor deles. Entrada A entrada contém vários casos de teste. A primeira linha de um caso de teste contém um inteiro N indicando o número de casos de teste T ( T ≤ 100000). Cada uma das T linhas seguintes contém dois inteiros A e C (1 ≤ A, C ≤ 107). Saída Para cada caso de teste da entrada seu programa deve uma linha contendo B tal que MMC(A,B) = C. Se não existir tal valor escrever "NO SOLUTION". Exemplo de Entrada 3 2 6 32 1760 7 16 Saída para o Exemplo de Entrada 3 55 NO SOLUTION Problema I (Valladolid 12493) Estrelas Fernando ganhou um compasso de aniversário, e agora sua diversão favorita é desenhar estrelas; primeiro, ele marca N pontos sobre a circunferência, dividindo-a em N arcos iguais; depois, ele liga cada ponto ao k-ésimo ponto seguinte, até voltar ao ponto inicial. Dependendo do valor de k, Fernando pode ou não atingir todos os pontos marcados sobre a circunferência; quando isto acontece, a estrela é chamada de completa Por exemplo, quando N=8, as possíveis estrelas são as mostradas no desenho abaixo; as estrelas (a) e (c) são completas, enquanto as estrelas (b) e (d) não o são. Dependendo do valor de N, pode ser possível desenhar muitas estrelas diferentes; Fernando pediu que você escrevesse um programa que, dado N, determina o número de estrelas completas que ele pode desenhar. Entrada Cada caso de teste contém de uma única linha, contendo um único inteiro N, indicando o número de arcos no qual a circunferência foi dividida. Saída Para cada caso de teste, seu programa deve imprimir uma única linha contendo um único inteiro, indicando o número de estrelas completas que podem ser desenhadas. Restrição 3 ≤ N< 231 Exemplo de entrada 3 4 5 18 36 360 2147483647 Saída para o exemplo de entrada 1 1 2 3 6 48 1073741823 10 Problema J (Valladolid 1644) Prime Gap The sequence of n - 1 consecutive composite numbers (positive integers that are not prime and not equal to 1) lying between two successive prime numbers p and p + n is called a prime gap of length n . For example, < 24, 25, 26, 27, 28 > between 23 and 29 is a prime gap of length 6. Your mission is to write a program to calculate, for a given positive integer k , the length of the prime gap that contains k . For convenience, the length is considered 0 in case no prime gap contains k . Input The input is a sequence of lines each of which contains a single positive integer. Each positive integer is greater than 1 and less than or equal to the 100000th prime number, which is 1299709. The end of the input is indicated by a line containing a single zero. Output The output should be composed of lines each of which contains a single non-negative integer. It is the length of the prime gap that contains the corresponding positive integer in the input if it is a composite number, or `0' otherwise. No other characters should occur in the output. Sample Input 10 11 27 2 492170 0 Sample Output 4 0 6 0 114 11