Java :: Aufgabe #58

3 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von Syntax6 (420 Punkte) - 13.09.2015 um 18:25 Uhr
Quellcode ausblenden Java-Code

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

	}
}
vote_ok
von LeebPhil (250 Punkte) - 10.03.2016 um 11:50 Uhr
Quellcode ausblenden Java-Code
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();
		}
	}
}
vote_ok
von paddlboot (3970 Punkte) - 10.07.2019 um 08:32 Uhr
Quellcode ausblenden Java-Code
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);
	}
}