Professional Documents
Culture Documents
DIVISIBILIDAD
a y b enteros
b divide a a (b | a)
a / b es entero
existe k entero tal que a = b k
a es mltiplo de b si existe k entero tal que
a = b k
divisor trivial: 1
divisores no triviales: factores
nmero primo: nicos divisores 1 y s mismo
Ejemplo:
Divisores de 12: 1, 2, 3, 4, 6 y 12.
Factores primos de 12: 2, 2, y 3.
TEOREMA
Para cualquier entero a
y un nmero positivo b
existen enteros q y r
tal que 0 <= r < b y a
= q b + r
q: cociente
|_ a / b _|= q
r: residuo o resto
a mod b = r
Propiedades:
Si a|b y b!=0 entonces
|a|<=|b|.
Si a|b y b|c entonces
a|c.
Si a|b, entonces a|bc.
|a| divide a |b| si y
solo si a|b.
Si a|b y b|a entonces |
a| = |b|.
Si a|b, entonces a|
(b+c) s y solo s a|c.
a|0, 1|a.
Si ab|ac y a!=0
entonces b|c.
MCD
Mayor de divisores comunes
d = mcd(a1,a2,...,an)
donde: mcd(a1,a2,...,an)=max{d tq d|a1 y
primos.
Ejemplo: mcd(60,80,100)
60 2
30 2
15 3
55
1
80 2
40 2
20 2
10 2
55
1
100 2
50 2
25 5
55
1
d = mcd(60,80,100) =
2^23^05^1 = 20
Propiedades:
mcd(a1,a2,...,an) =
max{d tq d|a1 y d|a2
y ... y d|an}
mcd(a,b) = mcd(b,a)
mcd(a,0) = mcd(0,a) = a
mcd(a,b,c) =
mcd(mcd(a,b),c) =
mcd(a,mcd(b,c)) =
mcd(b,mcd(a,c))
mcd(da,db) =
dmcd(a,b)
Si d|a y d|b entonces d|
mcd(a,b)
Si mcd(a,b)=1 entonces a
y b son primos entre s.
ALGORITMO DE EUCLIDES
Primero:
Si a >= b y a = bk entonces mcd(a,b) = b
Segundo:
Si a >= b y a = bk + r y d|a y d|b
ALGORITMO DE EUCLIDES
Ejemplo: a = 350 y b = 98
mcd(350,98)=mcd(98,350 mod 98)=mcd(98,56)
mcd(98,56)=mcd(56,98 mod 56)=mcd(56,42)
mcd(56,42)=mcd(42,56 mod 42)=mcd(42,14)
mcd(42,14)=mcd(14,42 mod 14)=mcd(14,0)
Entonces, mcd(350,98)=14
ALGORITMO DE EUCLIDES
Recursivo:
Suponiendo a>=b
ALGORITMO DE EUCLIDES
Iterativo:
Suponiendo a>=b
ALGORITMO EXTENDIDO DE
EUCLIDES
Calcula el mcd y tambin x y y que
satisfagan:
ax + by = mcd(a,b)
Sustituyendo r=a-b|_a/b_|
bx + a-b|_a/b_|y = mcd(b,r) = mcd(a,b)
Para hallar x y y hay que partir del
ALGORITMO EXTENDIDO DE
EUCLIDES
Suponiendo a>=b
ALGORITMO EXTENDIDO DE
EUCLIDES
Ejemplo: a = 350 y b = 98
a
b
*x
*y
x1
350
98
2
-7
98
56
-1
2
56
42
1
-1
42
14
0
1
14
0
1
0
Entonces, mcd(350,98) =
700686 = 14
y1
g
-1
2
14
1
-1
14
0
1
14
1
0
14
14
3502+98(-7) =
MCM
Mnimo de mltiplos comunes
m = mcm(a1,a2,...,an)
donde: mcm(a1,a2,...,an)=min{m tq m>1 y
80 2
100 2
30 2
40 2
50 2
15 3
20 2
25 5
55
10 2
55
55
mxima potencia:
m = mcm(60,80,100) = 2^43^15^2 = 1200
tiene:
mcm(a,b) = ab/mcd(a,b)
ARITMTICA MODULAR
Aplicacin de la funcin mdulo en
operaciones aritmticas
Definicin de mdulo:
a mod b = a b|_a/b_|
SUMA
(x+y) mod m = (x mod m + y mod m) mod m
Ejemplo:
(8+7) mod 3 = 15 mod 3 = 0
(8+7) mod 3 = (8 mod 3 + 7 mod 3) mod 3
= (2+1) mod 3 = 0
RESTA
(x-y) mod m = (x mod m - y mod m) mod m
Ejemplo:
(8-7) mod 3 = 1 mod 3 = 1
(8-7) mod 3 = (8 mod 3 - 7 mod 3) mod 3 =
(2-1) mod 3 = 1
(-x) mod m = (m - x) mod m
Ejemplo:
(-5) mod 3 = (3-5) mod 3 = (-2) mod 3 = (32) mod 3 = 1
MULTIPLICACIN
(xy) mod m = ((x mod m)(y mod m)) mod m
Ejemplo:
(45) mod 3 = 20 mod 3 = 2
(45) mod 3 = ((4 mod 3)(5 mod 3)) mod 3 =
(12) mod 3 = 2
(x^n) mod m = ((x^(n-k) mod m)(x^k mod m))
Ejemplo:
8 mod 3 = 2
8 mod 3 = ((4 mod 3)(2 mod 3)) mod 3 = (12)
mod 3 = 2
CONGRUENCIA
Definiciones:
PROPIEDADES
Reflexiva:
a=a mod m s y solo s a mod m = b mod m
Simtrica:
Si a=b mod m entonces b=a mod m
Transitiva:
Si a = b mod m y b = c mod m entonces a=c mod m
Suma:
Si a = b mod m y c = d mod m entonces (a+c) = (b+d)
mod m
Multiplicacin:
Si a = b mod m y c = d mod m entonces (ac) = (bd)
mod m
Potencia:
Si a = b mod m entonces (a^n) = (b^n) mod m
CONGRUENCIA LINEAL
Definicin:
ax=b mod m s y solo s m|(ax-b) o ax=b+km , donde se
pretende hallar k
ALGORITMO CLSICO
int primo (long p) {
long i, cnt = 0;
for (i = 1; i<=p; i++)
if ( p%i==0 )
cnt = cnt + 1;
if ( cnt == 2 )
return 1;
else
return 0;
}
MEJORAMIENTO
0, 1 y negativos no son primos.
2 nico par primo.
Otros pares no primos.
Todos los primos exceptuando el 2 son
ALGORITMO MEJORADO
int isPrime (long p) {
long i, root;
if ( p<2 ) return 0;
/*
if ( p==2 ) return 1;
/*
if ((p&1)==0) return 0; /*
root = (long)sqrt(p);
for( i=3; i<=root; i+=2 )
if ( p%i == 0 )
return 0;
/*
return 1;
/*
}
/* p&1==0 <=> p%2==0 es decir,
FALSE */
TRUE */
FALSE */
FALSE */
TRUE */
si p es par */
CRIBA DE ERATSTENES
2
3
5
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2
2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x x x
x
x x x
x
x x x
x x x
2 2 2
7 8 9
x
x
x x
3
0
x
x
x
x
CRIBA DE ERATSTENES
#include<stdio.h>
#include<math.h>
int main(){
long i, cnt=0;
criba();
for( i=2; i<MAX; i++)
if( V[i]==1 )
cnt++;
printf("desde 2 hasta %ld
hay %ld primos", MAX, cnt);
return 0;
}