簡體   English   中英

(3 ^ n + 2 ^ n)%10表示大n

[英](3^n + 2^n) % 10 for large n

所以我有一個N最多9位數,我必須得到3 ^ n + 2 ^ n的最后一位數。 這種問題有規則嗎? 我到目前為止的代碼:

#include <fstream>
#include <algorithm>
#include <math.h>
using namespace std;

ifstream fin("input.in");
ofstream fout("input.out");

int main(){
int n;
fin>>n;

fout<<fmod(pow(3,n)+pow(2,n),10);
}

但是,如果我使用它並且n大於1000則顯示nan。

我的問題是:這樣的問題有規則嗎?

好吧,我們知道(3^n + 2^n) % 10 = ((3^n % 10) + (2^n % 10)) % 10 ,所以我們可以使用Modular Exponentation來快速解決這個問題。

基本前提是3^n % 10 = (3 * (3^(n-1) % 10)) % 10

嗯,最簡單的答案如下:

3^0 === 1;
3^1 === 3;
3^2 === 9;
3^3 === 7;
3^4 === 1;
3^5 === 3;

因此,3 ^ n的最后一位數為3,9,7或1,基於N.所以,N%4 == 0 => 3 ^ n的最后一位是1,== 1 => 3,== 2 => 9,== 3 => 7。

您可以為2 ^ n寫出相同的內容:

1,2,4,8,如圖6所示 ,2,...

這個循環可以一直重復,排除了主要規則:2 ^ n的最后一位是:

N == 0 => 1
N > 0 => 
    (N - 1) % 4 == 0 => 2
    (N - 1) % 4 == 1 => 4
    (N - 1) % 4 == 2 => 8
    (N - 1) % 4 == 3 => 6

計算完3 ^ n和2 ^ n的最后一位數后,只需將它們加在一起即可。

你可以用數學方法解決它。 讓我們看一下序列u n = 3 ^ n%10:u 0 = 1,然后再看3,9,7和1。 它立即給出:

u 4k = 1,u 4k + 1 = 3,u 4k + 2 = 9,u 4k + 3 = 7

現在看v n = 2 n %10:v 0 = 1然后再看2,4,8,6和2。 它給出了k> 0:

v 4k = 6,v 4k + 1 = 2,v 4k + 2 = 4,v 4k + 3 = 8

你立即得到結果:對於N> 1,只看N'= N%4,結果分別為7,5,3,5

在C ++中,它將給出:

#include <fstream>
using namespace std;

ifstream fin("input.in");
ofstream fout("input.out");

int main(){

    int n;
    fin>>n;

    int result[] = { 7,5,3,5};
    fout<<(n == 0) ? 2 : result[n%4];
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM