Wypisywanie liczb doskonałych-problem

0

Chcę stworzyć program który wypisuje wszystkie(jak najwięcej, bo one idą w nieskończoność) liczby doskonałe i tu mam problem bo gdzieś się walnąłem. Proszę napiszcie mi taki program.

0

A gdzie się walnąłes? Pokaż... :P

0

"Proszę napiszcie mi taki program." - Off-topic -> Praca. Gotowca ci nikt nie napisze

0

Tu przesyłam mój program.Gdzie robię błąd?

 #include<iostream>
using namespace std;

int main(){
    unsigned long long a=2;
    unsigned long long w=0;
    
    for(;;){
            
            for(int i=0;i<a;i++){
                    if(a%i==0){
                               w=w+i;
                    }
            }
            
            if(a==w){
                     cout <<a<<endl;
                     }
    a++;
}

system("pause");
return 0;
}
0

Nie powinieneś zerować w?

0

W IX księdze Elementów Euklides podał sposób znajdowania liczb doskonałych parzystych: należy obliczać sumy kolejnych potęg dwójki np. 1 + 2 + 4 + 8 +... Jeżeli któraś z otrzymanych sum okaże się liczbą pierwszą, należy pomnożyć ją przez ostatni składnik i otrzymamy liczbę doskonałą.


Jak dotąd nie udało się znaleźć liczby doskonałej nieparzystej,

0

Jak próbuję go skompilować wyskakuje mi a.exe has stopped working. Możecie sprawdzić ten pomysł?

0

Even perfect numbers

#include <stdio.h>
unsigned long long int s,n1;
unsigned int p,i,n;
 
int main(){
        p =2; 
        n =3;  // n== 2^p - 1
        n1=2;  // n1*n perfect number if n is prime
        do{
                s=4;                     // 1  Lucas-Lehmer test
                for(i=3; i<=p; i++)      // 2
                        s=(s*s-2) % n;   // 3
                if (s==0 || p==2)        // 4
                        printf("Mersenne prime=2^%2d-1=%10d, perfect number %20llu\n", p, n, n1*n);
                p++;
                n1=n+1;
                n=2*n+1;
        }while (p<32);
        return(0);
}</CODE>
Output

Mersenne prime=2^ 2-1= 3, perfect number 6
Mersenne prime=2^ 3-1= 7, perfect number 28
Mersenne prime=2^ 5-1= 31, perfect number 496
Mersenne prime=2^ 7-1= 127, perfect number 8128
Mersenne prime=2^13-1= 8191, perfect number 33550336
Mersenne prime=2^17-1= 131071, perfect number 8589869056
Mersenne prime=2^19-1= 524287, perfect number 137438691328
Mersenne prime=2^31-1=2147483647, perfect number 2305843008139952128</CODE>

0
#include<iostream>
using namespace std;

int main()
{
    unsigned long long a;
    unsigned long long w;

    for(a = 2; a > 18446744073709551615; a+=2)
    {
        w = 0;
        for(unsigned long long int i=1; i<a=/2; i++)
        {
            if(a%i==0)
            {
                w+=i;
            }
        }
        if(a==w)
        {
            cout <<a<<endl;
        }
    }
    return 0;
} 

Przeszukuje cały rozmiar uns long long int'a.
PS. Bez optymalizacji.

0

Program prawie działa ale wypisuje liczby doskonałe tylko do ok. 8130. Wygląda jakby coś liczył ale po odczekaniu nadal nic. Jak tu naprawić ?

0

Ten działa, tylko że if 1844674407370955161518446744073709551615/2 trwa długo.

0
main(){
	int k,i,w=1,n=33550336;
	for(k=0;k<100;k++)
		for(i=2;i<n;i++)
			if(n%i==0) w+=i;
	printf("%d %d\n",n,w/100);
	return 0;
} 

Ile czasu zajmuje wykonanie tego programu?

0

Ale to bada maksymalny zakres uns long long int?

0

Tu sprawdzamy 100 razy czy pewna konkretna liczba jest doskonała.
Robimy to po to by zastanowić się ile czasu zajmie dotarcie do tej liczby sprawdzając wszystkie po kolei.
A to dopiero piąta taka liczba (znamy ich tylko 47).
A kolejna jest ponad 100 razy większa.
Nawet ten proponowany przez was algorytm da się przyśpieszyć.
Może nawet dziesiątki tysięcy razy bez wnikania w poważną matematykę (znaną od ponad dwu tysiącleci)
Chętnie pogadam gdyby był ktoś zainteresowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1