Empecemos pues:
Citar
1. Implemente el método "call:EsPrimo valor" que devuelve true o false en dependiendo de si el valor de la variable a es un número primo o no. Intente hacerlo de la manera más eficiente posible.
Código:
@echo off
REM Comprueba si un Numero es Primo
REM Coded by :: SmartGenius ::
color 0a
if ["%1"]==[""] goto :error
:ini
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :cprimo %num%
echo %primo%
goto :eof
:cprimo
set primo=True
set /a lim=%1-1
for /l %%a in (2,1,%lim%) do (call :cprimo2 %%a)
goto:eof
:cprimo2
set /a p=(%num%)%%(%1)
if %p%==0 set primo=False
goto :eof
:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
Citar
2. Implemente el método "call:PrimoMasCercano valor" Este método debe devolver el número primo más cercano al valor.
Código:
@echo off
color 0a
REM Busca el Numero Primo mas cercano al Valor N
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set n=%1
set /a c=%n%*1
if not %c%==%n% goto :error
call :near %n%
echo %near%
goto :eof
:near
set lim=%1
for /l %%b in (1,1,%lim%) do (
for /f %%c in ('call EsPrimo %%b') do (
if %%c==True set near=%%b
))
goto :eof
:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
Citar
3. Implemente el método "call:TérminoPrimo valor" Este método debe devolver el n-ésimo término de la sucesión de números primos.
Código:
@echo off
color 0a
REM Busca El N-esimo valor de la Sucesion de Numeros Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
:init
set t=%1
set /a c=%t%*1
if not %c%==%t% goto :error
call :ter %t%
echo %ene%
goto :eof
:ter
set lim=%1
set l=1
for /l %%b in (1,1,9999) do (
for /f %%c in ('call EsPrimo %%b') do (
if defined ene goto :eof &goto :eof
if %%c==True call :val %%b
))
goto :eof
:val
if %l%==%lim% set ene=%1
set /a l=%l%+1
goto :eof
:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
Citar
4. Implemente el método "call:DescomposiciónPrimos valor" Este método debe escribir en la consola la descomposición en números primos del valor.
Código:
@echo off
color 0a
REM Descomposicion en Factores Primos
REM Coded by :: SmartGenius ::
if ["%1"]==[""] goto :error
setlocal
:ini
set op=
set num=%1
set /a c=%num%*1
if not %c%==%num% goto :error
call :func1 %num%
:fin
echo %op:~1%
endlocal
goto :eof
:func1
set lim=%1
for /f %%z in ('call EsPrimo %lim%') do (if %%z==True set op=*1*%lim% & goto :eof)
for /l %%n in (2,1,%lim%) do (
for /f %%c in ('call EsPrimo %%n') do (
if %%c==True call :func2 %lim% %%n
))
goto :eof
:func2
set val=%1
:func3
set var=%op%
set /a c=%var:~1%
if %c% GEQ %lim% goto :eof
set /a mod=(%val%)%%(%2)
if %mod%==0 set op=%op%*%2& set /a val=(%val%)/(%2)&goto :func3
goto :eof
:error
echo No ha introducido un Valor Numerico
echo.
pause
exit
Citar
5. Implemente el metodo "call:PowerPrimos cadena" Teniendo una cadena como "2*2*3*3*23" que es la descomposicion de "828" en numeros primos devolver una cadena que eleve los valores que se repiten. Para este caso el metodo debe devolver "2^2*3^2*23".
Código:
@echo off
color 0a
REM Simplificacion de Cadenas
REM Coded by :: SmartGenius ::
setlocal enabledelayedexpansion
if ["%1"]==[""] goto :error
:init
set cadena=%1
call :string %cadena%
:func
for /l %%f in (1,1,%l%) do (call :func2 %%f)
for /l %%g in (1,1,%l%) do (call :func3 %%g)
goto :next
:func2
set lim=%1
for /f "tokens=%lim% delims=*" %%k in ("%cadena%") do (call :add %%k)
goto :eof
:func3
set lim=%1
for /f "tokens=%lim% delims=*" %%j in ("%cadena%") do (call :var %%j)
goto:eof
:next
set oper=%oper:l1=%
set oper=%oper:l=^^^^%
echo %oper:~1%
goto :eof
:var
set t1=%1
if not defined t%t1% call :var2 %t1%
goto:eof
:var2
call set var=!p%1!l!n%1!
set t%1=%1
set oper=%oper%*%var%
goto :eof
:add
set /a n%1+=1
set p%1=%1
goto:eof
:string
set texto=%1
:string2
if not "%texto:~0,1%"=="" (set /a l=%l%+1)
set texto=%texto:~1%
if "%texto%"=="" goto :eof
goto :string2
Todos estos codigos los podemos usar desde la consola...
o desde un codigo principal
Código:
@echo off
mode con cols=40 lines=20
title Algoritmo de Numeros Primos
color 0a
REM Calculo de Funciones y Algoritmos con Numeros Primos
REM Matematicas Euclidianas
REM Coded by :: SmartGenius ::
:main
set opc=
cls
echo.
echo Bienvenido al Programa
echo.
echo Escoja un Opcion [X] Salir
echo.
echo 1. Comprobar si un Numero es Primo
echo 2. Primo mas cercano de un Numero (N)
echo 3. Obtener el N-esimo termino Primo
echo 4. Descomponer un Numero
echo 5. Mostrar Descomposicion Recursiva
echo.
set /p opc="Opcion >> "
if not defined opc goto main
if /i %opc%==x exit
if %opc%==5 call :func5
if %opc% GTR 5 goto main
set /p number="Introduzca el Dato : "
if not defined number goto main
set /a b=%number%*1
if not %b%==%number% goto :error
if %opc%==1 call :func1 %number%
if %opc%==2 call :func2 %number%
if %opc%==3 call :func3 %number%
if %opc%==4 call :func4 %number%
pause
goto :main
:func1
set esprimo=NO
set valor=%1
for /f %%c in ('call EsPrimo %valor%') do (
if %%c==True set esprimo=SI
)
echo ^> %valor% %esprimo% es un Numero Primo
pause
goto :main
:func2
set valor=%1
for /f %%d in ('call PrimoMasCercano %valor%') do (set next=%%d)
echo ^> Primo mas cercano de %valor% es %next%
pause
goto :main
:func3
set valor=%1
for /f %%e in ('call TerminoPrimo %valor%') do (set termino=%%e)
echo El %valor% Numero de la Sucesion de
echo Numeros Primos corresponde a %termino%
pause
goto :main
:func4
set nmb=%1
for /f %%u in ('call DescomposicionPrimos %nmb%') do (set desc=%%u)
echo Descomposicion de %nmb% = %desc%
pause
goto :main
:func5
set /p txt="Introduzca la cadena > "
if not defined txt goto :func5
call PowerPrimos %txt%
pause
goto :main
:error
echo No ha introducido un Valor Numerico
pause
goto :main
Espero le sea de gran utilidad...
Saludos.