Sto facendo un'attività (per me stesso) molto complessa, in cui devo calcolare il maggior numero possibile di sequenze quando viene dato un numero n di segmenti.Come usare Modulo in modo efficiente?
Ho scoperto che il numero in catalano rappresenta queste sequenze e ho funzionato per n < = 32. I risultati che ottengo dovrebbero essere calcolati mod 1.000.000.007. Il problema che ho è che "q" e "p" diventano grandi per un lungo int lungo e non posso semplicemente mod 1.000.000.007 prima di dividere "q" e "p" perché otterrei un risultato diverso.
La mia domanda è: esiste un modo veramente efficace per risolvere il mio problema o devo pensare a memorizzare i valori in modo diverso? miei limiti sono i seguenti: - stdio.h/iostream solo - solo numeri interi - n < = 20.000.000 - n> = 2
#include <stdio.h>
long long cat(long long l, long long m, long long n);
int main(){
long long n = 0;
long long val;
scanf("%lld", &n);
val = cat(1, 1, n/2);
printf("%lld", (val));
return 0;
}
long long cat(long long q, long long p, long long n){
if (n == 0) {
return (q/p) % 1000000007;
}
else {
q *= 4 * n - 2;
}
p *= (n + 1);
return cat(q, p, n - 1);
}
Questo è esattamente quello che stavo cercando. Grazie. – jHN