Bom dia!

Revisando a solução anterior.

1) Se mdc (n,m)= 1 então (n,m) é múltiplo de n.

Pois não existirá um primo que divida n e (n-m), que veremos a seguir que é
condicionante para que não seja múltiplo.
E engloba casos triviais como (n,1) e (n,n-1).

Nota: o item 2 é suficiente para determinar se é múltiplo ou não. O item 1)
é um teste fácil



2) Critério geral.

(n,m) = n! / [((n-m)! m!] = n * (n-1)! / [(n-m)! m!]
 Se n divide (n,m) então, (n-1)! / [(n-m)! m!] pertence a |N.


Usando princípio de contagem é fácil observar que:

dado um primo p e usando critério de varredura de diversas contagens, temos
que:
*(i) se p^a || n! então a= [n/p] + [n/p^2] + [n/p^3] +....*
onde o símbolo || significa divide exatamente. Ou seja a=0 se p não divide
n! ou a é o expoente da fatoração de n! relativo ao primo p. E a expressão
entre colchetes simboliza a parte inteira do argumento.
Embora a série seja infinita, a partir de um dado valor do expoente de p, o
mínimo de x inteiro, que atenda a^x > n, todos os valores serão zero.

Seja (n-1)! = p1^a1 * p2^a2*p3^a3*...pj^aj

Seja (n-m)! = p1^b1 * p2^b2*p3^b3*...pk^ak, onde k<= j

Seja m!= p1^c1 * p2^c2*p3^c3*...pu^aû, onde u<= j

Para que  (n-1)! / [(n-m)! m!] pertença a |N, basta que ai>= bi + ci para
todo 1<= i <= min(u,k)

Seja a' o expoente da fatoração de (n-1)! referente ao primo p'
Seja b' o expoente da fatoração de (n-p)! referente ao mesmo primo p'
Seja c' o expoente da fatoração de p! referente ao mesmo primo p'

Para que a' < b' + c' , deverá haver, por (i), pelo menos um valor de x
inteiro que satisfaça:
 [(n-1)/p'^x] < [(n-m)/p'^x] + [m/p'^x]


Seja s= p'^x

[(n-1)/s] < [(n-m)/s] + [m/s]

(n-1) pode assumir as seguintes classes mods, que não sei como representar
a barra acima do número e também usarei o sinal de igual para representar
congruência, 0, 1, 2, ,3, s-1.

Como o objetivo é descobrir quando a' < b' + c', não serão considerados
os pares(m,n-m) cuja a soma dos restos de n e (n-m) por s dê maior ou
igual a s; pois, claramente teremos a' >= b' + c'.

Se n-1 = k mods e k<>s-1.

Temos:
[(n-1)/s]= (n-(k+1))/s
[m/s] = (m-w)/s e [(n-m)/s] = (n-m-z)/s, onde z+w = k+1; pois, m+(m-n) = n
= k+1 mods e devido a observação, detacada acima, não serão considerados os
casos que w+z = k+ s+1.
Então: [m/s] + [(n-m)/s] = (m-w)/s + (n-m-z)/s = (n-(K+1))/s = [(n-1)/s].
==> a'>= b' + c'

Se n-1 = s-1 mods.

Temos:
[(n-1)/s]= (n -s))/s
[m/s] = (m-w)/s e [(n-m)/s] = (n-m-z)/s, onde z+w = 0; pois, m+(m-n) = n
= 0 mods e devido a observação, detacada acima, não serão considerados os
casos em que w+z >= s. ==> w=z=0 ==> [m/s] + [(n-m)/s] = (m+ n- m)/s = n/s
> a'.

Se não é múltiplo temos que ter pelo menos um p' tal que n = 0 mods e m = n
= 0 mods, onde s= p'^x.

Ora mas se (n-1) = (s-1) mod s ==> n-1 = q.s + (s-1) com q inteiro ==> n-1
= q.p'^x + p'^x -1

n-1= (qp'^(x-1)+p'^(x-1)).p' + p'-1 e pelo fechamento da multiplicação e
adição em Z podemos afirmar que:

 n-1 = p-1 mod p.

Então se atender para um p'^x atenderá para p', p'^2...p'^x

Todavia, a observação da nota anterior estava errônea, pois, a condição é
necessária, porém não suficiente.

Notar que se uma parcela ou um grupo de parcelas de a' forem menores que a
soma das correspondentes em b' e c', não implica que outras parcelas não
venham a compensar e ao final a'>= b' + c'.

Os primos passíveis de serem testados são o de f!, onde f=min(m,n-m), ou
seja, 1, 3 , 5...p onde p<f

Então o algoritmo corrigido fica:

bandeira = Verdadeiro
Se mdc(m,n) <> 1
Então

Início Então

i=1

f= min(m,n-m)

Faça enquanto (p(i) <=f ou bandeira = falso)

Início Faça enquanto

Se (m = 0 mod p(i) e (m-n) =0 mod p(i)

Então

Inícío Então

p=p(i)

a= [(n-1)/p] + [(n-1)/p^2] + [(n-1)/p^3] +....

b= [m/p] + [m/p^2] + [m/p^3] +....

c= [(n-m)/p] + [(n-m)/p^2] + [(n-m)/p^3] +....

Se a < b + c

Então

bandeira = falso

Fim Então

i = i +1

Fim faça Enquanto

Fim Então
Se bandeira = verdadeiro
Então
É múltiplo de n. SIM
Senão
Náo é múltiplo de NÃO

Nota p(i) é o primo de ordem i, assim p(1)= 2, p(2) =3 e ...
 Vamos aos exemplos:

1) (38,17)

mdc(38,17)= 1 ==> É múltiplo.

2) (38,16)

mdc(38,16) <>1.

i=1
f= 16.
Bandeira = verdadeiro

p(1)=2

16 = 22 = 0 mod2
a = [37/2] + [37/4] + [37/8] + [37/16] + {37/32] = 18 + 9 + 4 + 3 + 1 = 35
b= [16/2] + [16/4] + [16/8] + [16/16] = 8 + 4 + 2 +1 = 15
c = [22/2] + [22/4] + [22/8] + [22/16] = 11 + 5 +2 + 1 = 19
a >= b + c
i=2
p(2) =3
16 <> 0 mod3
i=3
p(3)= 5
16 <> 0 mod5
e assim por diante, falharia para todos os demais primos, pois 16 é
potência de 2.
 Então é múltiplo de 38. SIM
*Nota: pelo algoritmo anterior daria um resultado errado que não seria.*


Se calcular para cada primo os valores de a, b e c é o que é garantido.
Tentei reduzir o trabalho olhando apenas para os potenciais primos cujos
expoentes b e c somados possam exceder a.
Espero que esteja correto o critério de exclusão usado, ou seja, m <> 0
modp ou m-n <> 0 mod p.
Infelizmente só há como resolver se a fatoração de n não tiver um fator p
superior a 2^74.207.281-1.

Agora, creio que esteja correto.
Agradeço se alguém validar.

 Saudações,
PJMS

-- 
Esta mensagem foi verificada pelo sistema de antiv�rus e
 acredita-se estar livre de perigo.

Responder a