Java :: Aufgabe #58
3 Lösungen

vollkommene Zahl (Mathematisches Problem)
Anfänger - Java
von bibir
- 03.09.2014 um 08:21 Uhr
Man nennt eine natürliche Zahl N "vollkommen", wenn die Summe aller echten Teiler von N gleich N ist.
Zum Beispiel ist 28 eine vollkommene Zahl, da 1 + 2 + 4 + 7 + 14 = 28 ist.
Schreibe ein Programm/Skript, das beliebig oft eine Zahl N (mit 0 < N < 100000) einliest und feststellt, ob N eine vollkommene Zahl ist. Falls ja, soll das Programm N und die zugehörenden echten Teiler ausgeben, andernfalls ist nur N und die Meldung "ERFUELLT DIE BEDINGUNG NICHT" zu drucken.
Zum Beispiel ist 28 eine vollkommene Zahl, da 1 + 2 + 4 + 7 + 14 = 28 ist.
Schreibe ein Programm/Skript, das beliebig oft eine Zahl N (mit 0 < N < 100000) einliest und feststellt, ob N eine vollkommene Zahl ist. Falls ja, soll das Programm N und die zugehörenden echten Teiler ausgeben, andernfalls ist nur N und die Meldung "ERFUELLT DIE BEDINGUNG NICHT" zu drucken.
Lösungen:

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Vollkommen { public static void main(String[] args) { int betrag; int zusammen = 0; List<Integer> teiler = new ArrayList<Integer>(); while (true) { Scanner s = new Scanner(System.in); betrag = s.nextInt(); for (int i = 1; i < betrag; ++i) { if (betrag % i == 0) { teiler.add(i); } } for (int i = 0; i < teiler.size(); i++) { zusammen += teiler.get(i); } if (zusammen == betrag) { System.out.println(teiler); } else { System.out.println(betrag + " -- Erfuellt die Bedingung nicht !"); } zusammen = 0; teiler.clear(); } } }

import java.util.ArrayList; import java.util.Scanner; /* * Even works for longs above 100.000 really quick. */ public class PerfectInteger { private static Scanner scanner; public static void main(String[] args) { long number; long added = 0; ArrayList<Long> divider = new ArrayList<Long>(); while (true) { scanner = new Scanner(System.in); number = scanner.nextLong(); for (long i = 1; i < Math.sqrt(number); i++) { if (number % i == 0) { divider.add(i); } } for(int i = divider.size() - 1; i > 0; i--) { long div = number / divider.get(i); divider.add(div); } for (int i = 0; i < divider.size(); i++) { added += divider.get(i); } if (added == number) { System.out.println(divider + " are dividers."); } else { System.out.println("'"+ number + "'" + " does not satisfy the conditions."); } added = 0; divider.clear(); } } }

import java.util.*; public class vollkommeneZahl { private static Scanner scanner; public static void main (String[] args) { scanner = new Scanner(System.in); ArrayList<Integer> teiler = new ArrayList<Integer>(); long betrag = 0; do { System.out.print("Bitte eine Zahl zwischen 0 und 100000 eingeben:\t"); long zahl = scanner.nextLong(); for(int i = 1; i < zahl; i++) { if(zahl % i == 0) { teiler.add(i); betrag += i; } } if(betrag == zahl) { for(int i = 0; i < teiler.size(); i++) { if(i == teiler.size()-1) { System.out.println(teiler.get(i) + " = " + zahl + "\n"); } else System.out.print(teiler.get(i)+ " + "); } } else { System.out.println(zahl + " ERFÜLLT DIE BEDINGUNG NICHT\n"); } }while(true); } }