2012-06-30 83 views
3

我需要計算第一n tetranacci數的總和但我使用(a/b)mod n爲大數?

sn = (f(n+2)+2*f(n)+f(n-1)-1)/3 

具有涉及除法的公式。
我在做f(n) modulo 10^9 + 7來計算第n個tetranacci項。對於某些情況,它給出了正確的答案,但並非全部。

有人可以幫助我得到如何計算它的正確邏輯嗎?

+1

大膽猜測:使用較大的數據類型。 – Corbin

+0

請修改您的問題,以包含f(n)值的特定示例,該值不會給出正確的答案。 –

+1

eulers theorm嗯,這是從項目歐勒嗎? – pyCthon

回答

2

對於模塊化算術,用模乘法替換乘除法。

如果k*d ≡ 1 (mod m)nd的倍數,那麼

n/d ≡ ((n % m)*k % m) (mod m) 

你可以看到,通過

k = (f*m + 1)/d 
n*k = (n*(f*m + 1))/d = ((n*f)*m + n)/d = (n/d)*(f*m) + (n/d) 

現在,n/d是假設一個整數,因此(n/d)*(f*m)m多,所以

n*k ≡ n/d (mod m) 

而且由於

n*k ≡ (n % m)*k (mod m) 

命題如下。

在這種情況下,d = 3m = 10^9 + 7,所以k = (10^9 + 8)/3 = 333333336

如果n不是d的倍數,但是不起作用。

+0

整潔,但我不認爲這將解決OP的問題(這可能是一個溢出問題)。 –

+0

thnks,它解決了我的問題。 我以前不知道模逆。 – user1489938

0

如果你有你在一個數字序列號,就可以計算出MOD使用這個這個大數目:

long mod_ans = 0; 

for(i = 0; i < digits_array_length; i++) 

{ 

    int digit = digits_array[i]; 
    mod_ans = (mod_ans * 16 + digit) % num; 
} 
+0

不回答這個問題。 –