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);
}
}