Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 43. Virtual rätsel

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
31.08.2003, 14:14 Uhr
virtual
Sexiest Bit alive
(Operator)


Sei S(n) Die Summe aller Teiler der Zahl n. Finde mit Hilfe eines Programms all jene Zahlen n für die gilt: S(n) == S(n+1)
Ein Elemente der Lösungsmenge ist 14, denn:

Code:
S(14) = 1+2+7+14 = 24
S(15) = 1+3+5+15 = 24


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.08.2003, 16:17 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wie all jene
soll das ding bis unendlich laufen?
oder reicht dir sowas


C++:
bool isteilersumme_n_gleich_teilersumme_nplus1(int n);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.08.2003, 16:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
int summe_teiler(int x){
int *teiler,summe=0,i,k,j=0;

for(i=1;i<=x;i++)if(!(x%i))j++;
k=j;

teiler= new int[j];
j=-1;
for(i=1;i<=x;i++)if(!(x%i))teiler[++j]=i;

for(i=0;i<k;i++)summe+=teiler[i];

delete [] teiler;

return summe;
}


bool isteilersumme_n_gleich_teilersumme_nplus1(int n){return summe_teiler(n)==summe_teiler(n+1);}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.08.2003, 17:30 Uhr
virtual
Sexiest Bit alive
(Operator)


@Windalf
Ja reicht mir. Ist auch korrekt nur leider langsam. Bekommst Du mehr Performance rein?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.08.2003, 17:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was passt dir nicht

das ich die schleife zweimal durchlaufe?
oder soll ich mir was schlaues einfallen lassen damit nicht bei jeder zahl getestet wird ob sie teiler sein kann
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.08.2003, 17:44 Uhr
Pablo
Supertux
(Operator)


@Windalf:
Du könntest alles in die erste For-Schleife packen. Du läufst 2 Mal von 1 zu x.


C++:
int summe_teiler(int x){
    int i, summe = 1; // 1 teilt alle Zahlen.
    for(i=2;i<=x;++i)
        if(!(x%i))
            summe += x;
    return summe;
}

int isteilersumme_n_gleich_teilersumme_nplus1(int n){return summe_teiler(n)==summe_teiler(n+1);}


Ich würde das so machen: Ich hab bool ist..... von @Windalf übernommen, weil das richtig ist.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 31.08.2003 um 17:55 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.08.2003, 17:50 Uhr
Pablo
Supertux
(Operator)


Vielleicht auch:

C++:
int summe_teiler(int x){
    int i summe;
    summe = 1 + (x%2) + x; // 1 teilt alle Zahlen.
    for(i=3;i<x;++i)
        if(!(x%i))
            summe += x;
    return summe;
}


For-Schleife wird nur x-3 Mal ausgeführt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 31.08.2003 um 17:52 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.08.2003, 17:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
int summe_teiler(int x){
x=abs(x);
int i,summe=x+1;
if(x==0)return 0;
if(x==1)return 1;
for(i=2;i<=x/2;i++)if(!(x%i))summe+=i;
return summe;
}



was hat mich nur dazu getrieben so einen schlechten code vorhin zu schreiben
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 31.08.2003 um 18:07 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.08.2003, 17:57 Uhr
Pablo
Supertux
(Operator)


Stimmt, bis zur Hälfte reicht schon, weil wir nur ints berechnen. Hab nicht daran gedacht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
31.08.2003, 18:40 Uhr
virtual
Sexiest Bit alive
(Operator)


IMHO reicht sogar bis zur Wurzel:
Gilt x%i==0, sind i und x/i Teiler von x; allerdings muß man dann noch spziell pürfen, ob i != x/i ist.

C++:
int summe_teiler(unsigned x){ // unsigned spart uns das abs
   int i,summe=x+1;
   if(x==0)return 0;
   if(x==1)return 1;
   for(i=2;i*i<x;i++) if(x%i==0)summe+= i +x/i; // nicht bis <= , siehe nächste Zeile
   if (i*i==x && x%i==0) summe += i;
   return summe;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 31.08.2003 um 18:41 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: