Qué es un número perfecto?
Un número es perfecto si es igual a la suma de todos sus divisores positivos sin incluir el propio número.
Por ejemplo, el número 6 es perfecto.
El 6 tiene como divisores: 1, 2, 3 y 6 pero el 6 no se cuenta como divisor para comprobar si es perfecto.
El 6 tiene como divisores: 1, 2, 3 y 6 pero el 6 no se cuenta como divisor para comprobar si es perfecto.
Si sumamos 1 + 2 + 3 = 6
Los siguientes números perfectos después del 6 son 28, 496, 8128, 33550336,
8589869056.
En esta entrada vamos a desarrollar el algoritmo para comprobar si un número es perfecto.
El programa pide por teclado un número y muestra si es perfecto o no. mediante un bucle for sumaremos los divisores del número. Al final si esta suma es igual al número mostraremos el mensaje correspondiente.
Programa java para calcular si un número es perfecto:
Programa java para calcular si un número es perfecto:
import java.util.Scanner;
public class NumeroPerfecto {
public static void main(String[] args) {
int i, suma = 0, n;
Scanner sc = new Scanner(System.in);
System.out.println("Introduce un número: ");
n = sc.nextInt();
for (i = 1; i < n; i++) { // i son los divisores. Se divide desde 1 hasta n-1
if (n % i == 0) {
suma = suma + i; // si es divisor se suma
}
}
if (suma == n) { // si el numero es igual a la suma de sus divisores es perfecto
System.out.println("Perfecto");
} else {
System.out.println("No es perfecto");
}
}
}
Utilizando el algoritmo anterior vamos a escribir ahora el programa Java que muestre los números perfectos entre 1 y 1000
public class NumerosPerfectos1a1000 {
public static void main(String[] args) {
int i, j, suma;
System.out.println("Números perfectos entre 1 y 1000: ");
for(i=1;i <= 1000;i++){ // i es el número que vamos a comprobar
suma = 0;
for(j = 1;j < i;j++){ // j son los divisores. Se divide desde 1 hasta i-1
if(i % j==0){
suma = suma + j; // si es divisor se suma
}
}
if(i == suma){ // si el numero es igual a la suma de sus divisores es perfecto
System.out.println(i);
}
}
}
}
muy bueno el programa...!!!!!
ResponderEliminarcomo puedo realizar el ingreso de un numero binario para obtener su equivalente decimal
ResponderEliminarMuy aporte GRACIAS ..
ResponderEliminargracias esta muy bien explicado
ResponderEliminarMuchas gracias a todos!!!
ResponderEliminarHola, me ah saltado un error con mi código, realizandolo como tu lo has hecho me va de maravillas, pero se me ocurrió meterle la función de repetición (do{ Código } while) Bueno, lo eh hecho y me fue bien pero al finalizar me salta el error "Sintax error, inser while (expresion;)" . Quisiera saber cuales son los errores en mi código:
ResponderEliminarpackage EnProceso;
import java.util.*;
import java.io.*;
public class Práctica {
public static void main (String[] ars)throws IOException{
Scanner sc = new Scanner (System.in);
int i, n, suma = 0;
char car;
do { System.out.println("Ingrese el número:");
n = sc.nextInt();
for (i = 1; i < n; i++){
if (n%i==0){
suma = suma + i;
}
}
if (suma == n){
System.out.println(n+" es un número perfecto");
else{
System.out.println(n+" no es un número perfecto");
System.out.println("¿Desea repetir? (S para repetir | Otro para finalizar))");
car = (char) System.in.read();
}while (car == 's' | car == 'S');
System.out.println("Programa finalizado. Gracias por usar nuestro sistema");
}
}
El operador OR es una doble barra || Modíficalo y comprueba si te funciona
EliminarUn saludo y gracias por seguir el blog.
Hola, hace rato que no me estaba en Java, por los deberes, pero ayer pude volver, y me acorde de este tema, lo quise arreglar, poniendo dos barras
Eliminar}while (car == 's' || car == 'S');
Pero no ah resultado, salta el mismo error, o eso no es el OR? Podrías ayudarme, gracias de antemano.
Pues yo estoy empezando con java, creo que te falta algún } aquí y allá.
Eliminarpublic static void main (String[] args)throws IOException {
Scanner sc = new Scanner (System.in);
int i, n, suma = 0;
char car = 0;
do {
System.out.println("Ingrese el número:");
n = sc.nextInt();
for (i = 1; i < n; i++) {
if (n%i==0) {
suma = suma + i;
}
}
if (suma == n) {
System.out.println(n+" es un número perfecto");
}
else {
System.out.println(n+" no es un número perfecto");
System.out.println("¿Desea repetir? (S para repetir | Otro para finalizar))");
car = (char)System.in.read();
}
}while(car == 's' || car == 'S');
System.out.println("Programa finalizado. Gracias por usar nuestro sistema");
}
}
De todas formas al hacer esto, en la variable "car" me salía un error de que no estaba inicializada, así que tuve que ponerle el valor de cero. Aunque he leído por ahí que esto no es recomendable.
Sorry, me he colado respondiendo con un post.
import java.util.*; //Añade utilidades a nuestro código
Eliminarimport java.io.IOException;
public class MyClass {
public static void main(String args[]) {
Scanner lector = new Scanner(System.in); //Utilidad de interacció
System.out.println("Ingresar un numero:"); //Utilidad para escribir en pantalla
int m = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
int n = 0;
int c = 0;
int d = 0;
int f = 0;
do{
f = m - 1;
n = n + 1;
c = m % n;
if (c == 0){
d = d + n;
}
}while (n != f);
if (d == m){
System.out.println("el numero es perfecto");
}else{
System.out.println("el numero no es perfecto");
}
}
}
aca para los numeros entre el 1 y 1000
Eliminarimport java.util.*; //Añade utilidades a nuestro código
public class MyClass {
public static void main(String args[]) {
Scanner lector = new Scanner(System.in); //Utilidad de interacció
System.out.println("Empezando listado:"); //Utilidad para escribir en pantalla
int m = 1;
do{
m = m + 1;
int n = 0;
int c = 0;
int d = 0;
int f = 0;
do{
f = m - 1;
n = n + 1;
c = m % n;
if (c == 0){
d = d + n;
}
}while (n != f);
if (d == m){
System.out.println("el numero perfecto es: " + m);
}
}while(m <= 1000 );
}
}
Pues yo estoy empezando con java, creo que te falta algún } aquí y allá.
ResponderEliminarpublic static void main (String[] args)throws IOException {
Scanner sc = new Scanner (System.in);
int i, n, suma = 0;
char car = 0;
do {
System.out.println("Ingrese el número:");
n = sc.nextInt();
for (i = 1; i < n; i++) {
if (n%i==0) {
suma = suma + i;
}
}
if (suma == n) {
System.out.println(n+" es un número perfecto");
}
else {
System.out.println(n+" no es un número perfecto");
System.out.println("¿Desea repetir? (S para repetir | Otro para finalizar))");
car = (char)System.in.read();
}
}while(car == 's' || car == 'S');
System.out.println("Programa finalizado. Gracias por usar nuestro sistema");
}
}
De todas formas al hacer esto, en la variable "car" me salía un error de que no estaba inicializada, así que tuve que ponerle el valor de cero. Aunque he leído por ahí que esto no es recomendable.
public static int perfecto(int tope){
ResponderEliminarint x,acum=0;
for (x=1;x<=tope/2;x++){
if(tope%x==0){
acum++;
}
}
return acum;
}
//que le parece esto
aqui está el codigo arreglado, lo compilé con el netbeans y funciona, solo tuve que dos signos de llave de cierre, uno en el if y otro en el else, al principio me pedia que inicializara el char pero al agregarle esas dos llaves ya no me pide la inicializacion de char. dejaré el codigo.
ResponderEliminarimport java.util.*;
import java.io.*;
public class practica36 {
public static void main (String[] ars)throws IOException{
Scanner sc = new Scanner (System.in);
int i, n, suma = 0;
char car;
do { System.out.println("Ingrese el número:");
n = sc.nextInt();
for (i = 1; i < n; i++){
if (n%i==0){
suma = suma + i;
}
}
if (suma == n)
{
System.out.println(n+" es un número perfecto");
}
else{
System.out.println(n+" no es un número perfecto");
}
System.out.println("¿Desea repetir? (S para repetir | Otro para finalizar))");
car = (char) System.in.read();
}while (car == 's' || car == 'S');
System.out.println("Programa finalizado. Gracias por usar nuestro sistema");
}
Hola, muchas gracias por el código arreglado. Por cierto, por si alguien quiere usar este código se dará cuenta que la primera vez que se usa el programa anda bien, pero al repetir (Repetir no reiniciar) el programa este no calcula bien los números perfectos. La solución es simple y ha sido un error del que no me había percatado al crear el código:
EliminarScanner sc = new Scanner (System.in);
char car;
int i, n, suma = 0;
do {
System.out.println("Ingrese el número:");
n = sc.nextInt();
En esta parte del código vemos el código inicial de repetición (do { ) luego de dar los valores a los int. Al repetir el programa, los int. tenían el valor final, es decir que no volvía al valor inicial ( 0 ). Se arregla poniendo el código int por debajo del código de repeticón.
Scanner sc = new Scanner (System.in);
char car;
do {
int i, n, suma = 0;
System.out.println("Ingrese el número:");
n = sc.nextInt();
Gracias por la ayuda en este código Pasisica.
gracias
ResponderEliminarnecesito que me ayuden tengo una tarea en java que me piden lo siguente 3. Un número entero positivo se dice perfecto cuando es igual a la suma de sus divisores exceptuando al mismo. Por ejemplo 6=1+2+3 y 28=1+2+4+7+14 son números perfectos. Escribir un programa que:
ResponderEliminara. Pida un número entero n al usuario
b. Muestre por pantalla la lista de todos los números perfectos menores o iguales que n.
les agradeceria mucho que me ayudaran
me podrian ayudar con este ejercicio: 1. Diseñar y codificar un algoritmo que permita al ordenador adivinar un número comprendido entre 0 y 100 que haya pensado el usuario. Como salida, se mostrará el número de preguntas necesarias para adivinar el número
ResponderEliminarGenial aportación..!!!
ResponderEliminarpublic static void main(String[] args) {
ResponderEliminarint suma = 0;
Scanner sc = new Scanner(System.in);
System.out.print("número inicial: ");
int n1 = sc.nextInt();
System.out.print("número final: ");
int n2 = sc.nextInt();
System.out.println();
System.out.println("números perfectos: ");
do {
if (getPerfecto(n1))
System.out.println(n1);
n1++;
} while (n1 <= n2);
}
private static boolean getPerfecto(int numero) {
int suma = 0;
for (int i = 1; i < numero; i++) {
if (numero % i == 0) {
suma += i;
}
}
return (suma == numero);
}
alguien tiene ese codigo pero en recursivo ?????
ResponderEliminarbuenas noches !
ResponderEliminaralguien me podria decir como orientar este codigo hacia objetos?
buenas noches !
ResponderEliminaralguien me podria decir como orientar este codigo hacia objetos?
me podrían ayudar con un problema orientado a objetos???
ResponderEliminar/*se requiere un programa para crear un cuadro que el usuario
decida el tamaño del cuadro pero solo aparesca su perimetro
Ejemplo:
DAME EL TAMAÑO DEL CUADRO
5
* * * * *
* . . . .*
* . . . .*
* . . . .*
* * * * *
*/
Scanner leer= new Scanner(System.in);
System.out.println("DAME EL TAMAÑO DEL CUADRO");
int A = leer.nextInt();
for (int x = 0; x < A; x++)
{
for (int y = 0; y < A; y++)
{
System.out.print(" * ");
}
System.out.println("");
}
Estas mal
Eliminarayuda tengo un problema en eclipse es el mismo problema pero para una aplicación para androit ayuda
ResponderEliminarayuda necesito hacer esto pero en java desktop applicaction es en visual
ResponderEliminar¿Como obtendría el numero de números perfectos que deseo ver?
ResponderEliminarejemplo: quiero los primeros 3 números perfectos y me resuelva 6, 28, 496.
Gracias.
lo mismo pero con vectores o array
ResponderEliminarimport java.util.Scanner;
public class arregloprimoono {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner ing =new Scanner (System.in );
int n,i,ii,s=0;
int v[]=new int [1000];
System.out.println("ingrese limite ");
n=ing.nextInt();
System.out.println("ingrese numeros");
for (i=1;i<=n;i++)
{
v[i]=ing.nextInt();
for (ii=1;ii<v[i]-1;ii++)
{v[ii]=v[i];
if(v[ii]%ii==0){s=s+ii;}
}
if(s==v[i])
{System.out.println("es perfecto");s=0;}
else
{System.out.println("no es");s=0;}
}
}
}
Un soporte se considera que es uno cualquiera de los siguientes caracteres: (,), {,}, [o].
ResponderEliminarDos soportes se considera que son un par coincidente si ([{produce) a la izquierda de un corchete de cierre (es decir,),, o, o]} es decir, (,) el soporte de una abertura del mismo tipo exacto. Hay tres tipos de parejas de corchetes: [], {}, y ().
Un par de juego de corchetes no está equilibrado si el conjunto de soportes que encierra no se corresponden. Por ejemplo, {[(])} no es equilibrada porque el contenido en entre {y} no están equilibrados. El par de corchetes encierra un único soporte, la apertura desequilibrada, (y el par de paréntesis encierra un solo corchete de cierre, desequilibrado,].
Según esta lógica, decimos una secuencia de tramos se considera equilibrada si se cumplen las siguientes condiciones:
No contiene soportes incomparables.
El subconjunto de soportes encerrados dentro de los confines de un par emparejado de soportes es también un par emparejado de soportes.
cadenas dadas de soportes, determine si cada secuencia de paréntesis es equilibrada. Si una cadena es equilibrada, imprimir SÍ en una nueva línea; de lo contrario, no imprima en una nueva línea.
Formato de entrada
La primera línea contiene un solo número entero, que denota el número de cadenas.
Cada línea de las líneas subsiguientes se compone de una sola cadena, que denota una secuencia de soportes.
restricciones
, Donde es la longitud de la secuencia.
Cada carácter en la secuencia será un soporte (es decir, {,}, (,), [y]).
Formato de salida
Para cada secuencia, imprimir o no la serie de soportes se equilibra en una nueva línea. Si los soportes están equilibrados, imprimir SÍ; de lo contrario, no imprima.
Ejemplo de entrada
3
{[()]}
{[(])}
{{[[(())]]}}
Ejemplo de salida
SÍ
NO
SÍ
Explicación
La cadena {[()]} cumple ambos criterios para ser una cadena equilibrada, por lo que se imprime SÍ en una nueva línea.
La cadena {[(])} no es equilibrada, ya que los soportes encerrados por los pares coincidentes [(] y (]) no están equilibrados.
La cadena {{[[(())]]}} cumple ambos criterios para ser una cadena equilibrada, por lo que se imprime SÍ en una nueva línea.
alguien que me ayude
oye disculpa y como mande a llamar ese mismo metodo desde otra clase?.
ResponderEliminarMe refiero a tener una clase ejemplo donde se haga el metodo y clase principal donde se mande a llamar
Creando un objeto de la clase ejemplo y a través de él llamar al método
EliminarPor qué según inicialices la suma funciona o no el programa, no acabo de compenderlo porque lo hice poniendolo al inicio, y no funciona
ResponderEliminarGracias me Fue de Gran Ayuda
ResponderEliminarMe alegro Daniel, Gracias por el comentario
Eliminarme gustaria un programa que hiciese lo mismo pero con menor costo pq si usas numeros mayores que 200000 por ejemplo el tiempo de ejecucion es enorme
ResponderEliminarsi seria bueno eso
Eliminaryo lo traduje a c++
ResponderEliminarHola el programa de los números del 1 al 1000 está bien? Es que cuando lo hago como tu lo haces no me muestra nada.
ResponderEliminarCómo podría hacer un ciclo que cuente los números perfectos del 1 al 1000 de manera iterativa? :C
ResponderEliminarDiseñe una función que encuentre el primer número perfecto mayor que 28 (o un número n dado). Un número es perfecto si coincide con la suma de sus divisores (excepto él mismo). Por ejemplo, 28 es perfecto ya que 28 = 1 + 2 + 4 + 7 + 14. en python.
ResponderEliminarBuenas Alguien me puede ayudar con este ejercicio?? AYUDEMEN
ResponderEliminar1= permita ingresar 2 numeros, verificar si dichos numeros son primos gemelos
2= permite ingresar 3 numeros, verificar si la sumatoria de estos numeros es un numero primo y perfecto a la vez?
3= permite ingrezar 1 numero y precentar la serie de fivonacia asta el 100
//Primos gemelos
Eliminarimport java.util.*; //Añade utilidades a nuestro código
import java.io.IOException;
public class MyClass {
public static void main(String args[]) {
Scanner lector = new Scanner(System.in); //Utilidad de interacció
System.out.println("Ingresar un numero:"); //Utilidad para escribir en pantalla
int n1 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
System.out.println("Ingresar otro numero:"); //Utilidad para escribir en pantalla
int n2 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
int n = 0;
int c = 0;
int d = 0;
//Comprobar si es un numero primo el primero
do{
c = c + 1;
n = n1 % c;
if (n == 0){
d = d + 1;
}
}while (c <= n1);
//Comprobar si es un numero primo el segundo
int d1 = 0;
int c1 = 0;
int n4 = 0;
do{
c1 = c1 + 1;
n4 = n2 % c1;
if (n4 == 0){
d1 = d1 + 1;
}
}while (c1 <= n2);
//Comprobar si son gemelos
int n3;
if (d == 2 && d1 == 2){
n3 = n1 - n2;
if(n3 == -2 || n3 == 2){
System.out.println("los numeros: "+n1+" y "+n2+" son primos gemelos");
}else{
System.out.println("los numeros: "+n1+" y "+n2+" son primos pero no gemelos");
}
}else{
if(d != 2){
if (d1 == 2){
System.out.println("El numero: "+n1+" no es primo y el "+n2+" es primo");
}else{
System.out.println("los numeros: "+n1+" y "+n2+" no son primos");
}
}else{
if (d == 2){
System.out.println("El numero: "+n2+" no es primo y el "+n1+" es primo");
}else{
System.out.println("los numeros: "+n1+" y "+n2+" son primos");
}
}
}
}
}
//La suma de tres numeros, ver si es primo y perfecto
Eliminarimport java.util.*; //Añade utilidades a nuestro código
import java.io.IOException;
public class MyClass {
public static void main(String args[]) {
Scanner lector = new Scanner(System.in); //Utilidad de interacció
System.out.println("Ingresar un numero:"); //Utilidad para escribir en pantalla
int n1 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
System.out.println("Ingresar un segundo numero:"); //Utilidad para escribir en pantalla
int n2 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
System.out.println("Ingresar un tercer numero:"); //Utilidad para escribir en pantalla
int n3 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine();
int s = 0,n = 0,c = 0,d = 0;
s = n1 + n2 + n3;
//Comprobar si es un numero primo el primero
do{
c = c + 1;
n = s % c;
if (n == 0){
d = d + 1;
}
}while (c <= s);
//Comprobar si es perfecto
int n4 = 0, d1 = 0,f = 0;
do{
f = s - 1;
n4 = n4 + 1;
c = s % n4;
if (c == 0){
d1 = d1 + n4;
}
}while (n4 != f );
if (d == 2){
if (d1 == s){
System.out.println("La suma de los numeros: "+n1+" "+n2+" "+n3+" da un primo y un numero perfecto");
}else{
System.out.println("La suma de los numeros: "+n1+" "+n2+" "+n3+" da un primo y no es un numero perfecto");
}
}else{
if (d1 == s){
System.out.println("La suma de los numeros: "+n1+" "+n2+" "+n3+" no da un primo y es un numero perfecto");
}else{
System.out.println("La suma de los numeros: "+n1+" "+n2+" "+n3+" no da un primo y no es un numero perfecto");
}
}
}
}
buenas dias, quien me puede ayudar con este algortimo
ResponderEliminarelabore un algoritmo que calcule usando un menu si cada uno cojuntoi de numeros es : par,primo y perfecto
ResponderEliminarint numeros=10;
while ((numeros >=100) && (numeros <=1000) )
System.out.println(numeros, " ");
System.out.println("Son todos");
cual es la salida de este codigo?