Əvvəlcə ifadəni çevriləmək lazımdır:
İndi əməliyyat iki sayının artırılması və sonrasında çıxılması kimi görünür.
Siyahıdan və ədədini çıxaraq. Beləliklə, siyahıya daxil ediləcək ədəd
Sonra siyahıdan (x + 1) \cdot (y + 1) - 1 və ədədini çıxaraq. Beləliklə, siyahıya daxil ediləcək ədəd olacaq
Bu analoquya əsaslanaraq, deyə bilərik ki, əgər əvvəlcə
sonda hesablama nəticəsi
Ilk siyahı bütün tam ədədləri -dən -ə qədər əhatə etdiyindən, son nəticədə
Sonuç ədəd tam olaraq müəyyən edilir və əməliyyatların sıralanmasından asılı deyildir.
Alqoritmin Tətbiqi
Sabitləri elan edək.
#define MOD 1000000007
#define MAX 1000002Girdilər bir neçə testdən ibarətdir. massivini elan edək, belə ki, p[i] = i! olsun.
long long p[MAX];Test sayını oxuyuruq. Sayların faktoriallarını hesablayıb massiyə yığırıq: p[i] = i!.
scanf("%d", &tests);
p[1] = 1;
for (i = 2; i < MAX; i++)
p[i] = (p[i - 1] * i) % MOD;Testləri ardıcıl emal edirik.
while (tests--)
{Hər bir girdidə üçün cavabı çıxış - (n + 1)! - 1 hesablaıntısı.
scanf("%d", &n);
printf("%lld\n", p[n + 1] - 1);
}Python Tətbiqi
Sabitləri elan edək.
MOD = 1000000007
MAX = 1000002Sayların faktoriallarını hesablayıb siyahıda saxlayırıq: p[i] = i!
p = [1] * MAX
for i in range(2, MAX):
p[i] = (p[i - 1] * i) % MODTest sayını oxuyuruq.
tests = int(input())Testləri ardıcıl emal edirik.
for _ in range(tests):Hər bir girdidə üçün cavabı çıxış - (n + 1)! - 1 hesablaıntısı.
n = int(input())
print(p[n + 1] - 1)