All pastes #243680 Raw Edit

WerK

public java v1 · immutable
·published 2006-11-08 20:04 UTC
rendered paste body
import java.util.*;public class du6cv2 {    static {Locale.setDefault(Locale.US);}    /*     * Pokro&#269;ilí: Dokonalé &#269;íslo je takové &#269;íslo, které je rovno sou&#269;tu v&#353;ech svých d&#283;litel&#367;.      * &#268;íslo 6 je dokonalé, proto&#382;e 6 = 1 + 2 + 3. Napi&#353;te funkci, která zjistí, zda dané &#269;íslo je dokonalé.      * Pomocí této funkce zjist&#283;te po&#269;et dokonalých &#269;ísel men&#353;ích ne&#382; 1 000 000 a tato &#269;ísla vypi&#353;te.     */    public static boolean dokonalost(long vstup)    {        /*         * Dokonalost jednoho cisla, tato funkce je velice pomala a nevhodna pro velke rozsahy         */        long t = 0;        long hranice = vstup/2; //vyrazne zrychleni, nemusi se pocitat pri kazdem pruchodu cyklem        for (long i = 1;i <= hranice;i++)            if (vstup % i == 0) //je delitelem            {                t += i;                i += vstup % i;            }        if (t == vstup) return true;        else return false;    }        public static boolean isPrime(long vstup)    {        /*         * Pomocna fce pro kontrolu prvociselnosti         */        if (vstup == 1) return false;        double p = Math.sqrt(vstup);        for (long i = 2;i <= p; i++)            if (vstup % i == 0) return false;        return true;           }        public static void dokonalost_prime(long hranice)    {        /*         * Hledani dokonalych cisel pomoci Euklidovy vety :          * If as many numbers as we please beginning from a unit be set out continuously in double proportion,          * until the sum of all becomes a prime, and if the sum multiplied into the last make some number, the product will be perfect.         */        long soucet = 0;        long posledni_clen = 0;        long pocet_clenu = 0;        for (long i = 1 ; i < hranice ; i *= 2)        {            posledni_clen = i;            soucet += i;            if (isPrime(soucet))             {                if (soucet*posledni_clen > hranice) break;                System.out.println(soucet*posledni_clen);                pocet_clenu++;            }        }        System.out.println("V intervalu <1,"+hranice+"> je prave "+pocet_clenu+" dokonalych cisel");    }        public static void main(String[] args ) {        Scanner scan=new Scanner(System.in);        System.out.println(">>>  START "+Locale.getDefault()+"  # 1  \n");        System.out.println("Zvolte si zpusob hledni dokonalych cisel : ");        System.out.println("1 : klasicky");        System.out.println("2 : pomoci Euklidovy vety");        int volba = scan.nextInt();        long hranice;        switch (volba)        {            case 1 : {                long pocet_clenu = 0;                System.out.println("Pozor ! Tento zpusob je velmi pomaly a neni doporucen pro intervaly vetsi nez 10000");                System.out.println("Zadejte horni hranici intervalu pro hledani dokonalych cisel");                hranice = scan.nextLong();                System.out.println("");                for (long i = 1;i <= hranice;i++)                    if (dokonalost(i))                    {                        System.out.println(i);                        pocet_clenu++;                    }                System.out.println("V intervalu <1,"+hranice+"> je prave "+pocet_clenu+" dokonalych cisel");                break;            }            case 2 : {                System.out.println("Tato metoda pouziva Euklidovu vetu o dokonalych cislech a je vyrazne rychlejsi");                System.out.println("Zadejte horni hranici intervalu pro hledani dokonalych cisel");                hranice = scan.nextLong();                System.out.println("");                dokonalost_prime(hranice);                break;            }        }             System.out.println(">>>  STOP");    }}