Recentemente ho lavorato su topcoder e mi sono imbattuto in questa domanda che non riesco a capire. La domanda è di trovare F (n) = f (1) + f (2) + .... + f (n) per un dato "n" tale che f (n) è il più grande divisore dispari per n. Ci sono molte soluzioni banali per la risposta; tuttavia, ho trovato questa soluzione molto intrigante.Somma dei maggiori divisori dispari dei primi n numeri
int compute(n) {
if(n==0) return 0;
long k = (n+1)/2;
return k*k + compute(n/2);
}
Tuttavia, non capisco come ottenere una relazione ricorsiva da un'affermazione del problema come questa. Qualcuno potrebbe dare una mano?
Sono 'f' e' computa' la stessa cosa qui? – AakashM
@Aakash: No, non lo sono (se deve essere corretto), ho modificato la domanda. –
hai un errore di battitura: stai usando "N" e "n", per favore correggi –