Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Programa para determinar si un numero entrado por el teclado es perfecto
- // Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos.
- // lista: 6,28,496,8128,33550336,8589869056,137438691328
- import java.util.Scanner;
- public class NumPerf {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner leer = new Scanner (System.in);
- double num, resto, suma;
- boolean paso=true;
- System.out.print("Entre un numero entero para determinar si es perfecto: ");
- num= leer.nextDouble();
- suma=0;
- // el siguiente ciclo determina el resto de dividir el numero entrado por todos los numeros enteros menores que
- // el numero, si el resto da cero, es decir si el numero encontrado es un divisor, lo va acumulando en la variable
- // suma. Luego compara si suma es igual al numero entrado, si es igual es perfecto, en otro caso no lo es
- for (int i=(int)(num-1); i >1; i--){
- resto=num%i;
- if (resto==0){
- suma=suma+i;
- // el or siguiente es un truco para evitar el error de desborde que se da en el 5to numero perfecto
- // no dar bola a ese truco
- if ((suma+1) == num|| (suma*2+2)==num){
- System.out.println("El numero "+num+" es perfecto");
- paso=false;
- }
- }
- }
- if (paso){
- System.out.println();
- System.out.println("El numero "+num+" no es perfecto");
- // System.out.println("suma = "+ suma*2);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement