DESENV. E IMPLEMENTAÇÃO DE ALGORITMOS – 10/09/2016

Propaganda
DESENV. E IMPLEMENTAÇÃO DE ALGORITMOS – 10/09/2016
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 – Soma de MLSCM (Sum of MLSCM - Valladolid 1730)
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.', 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 1730)
Soma de MLSCM
A positive integer N can be the LCM (Least Common Multiple) of different set of
numbers. For example,LCM(6;24) = 24 , LCM(12;8) = 24, LCM(1;2;3;4;8) = 24, etc.
For a given number N, maximum sum LCM indicates the set of numbers whose LCM is
N and summation is maximum. Let, M SLCM (N) denote this maximum sum of
numbers. Given the value of N you will have to find the value: N = ∑i=2 M SLCM (i).
Obviously, in a set the same value never comes twice.
Entrada
Input file contains at most 200 lines. Each line contains a positive integer which denotes
the value of N (1 < N < 20000001). Input is terminated by a line containing a single
zero, which should not be processed.
Saída
For each positive number N in the input, produce one line of output. This line contains
an integer which denotes the value N i=2 MSLCM(i)
Exemplo de Entrada
10
1000
0
Exemplo de Saída
86
823080
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
Download