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)
@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)
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
@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.
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.
int summe_teiler(int x){ x=abs(x); int i,summe=x+1; if(x==0)return0; if(x==1)return1; 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ßbroteDieser Post wurde am 31.08.2003 um 18:07 Uhr von Windalf editiert.
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!
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)return0; if(x==1)return1; 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.