計算日期(快速冪 打表)

2021-09-23 14:25:46 字數 1039 閱讀 3246

題意:

今天星期六,求11+22……n^n天後是星期幾

思路:同餘與模算術,利用快速冪取模的演算法,時間複雜度為o(logn)。

1.先用快速冪求出1^1 , 2^2 +,3^3 , … ,n^n

對7取模之後的結果,發現迴圈節長度為42,即

(11)%7=(4343)%7,

(22)%7=(4444)%7,

(33)%7=(4545)%7,

(n^n)%7=( (42+n)^(42+n) )%7

2.然後打表求出[1,42]區間每個數n的(n^n)%7,再求a陣列的字首和b陣列,

sum表示乙個迴圈節所貢獻的天數,即sum=(1^1 +3^3+ … 41^41 + 42^42)%7=6;

對於每乙個樣例n,直接計算即可

#include #include char chars[7][10] = ;

// 快速乘 類似於快速冪

int qmul(int a, int b, int mod)

b >>= 1;

a = (a << 1) % mod;

} return ans;

}// 實現快速冪

int qpow(int a, int n, int mod)

n >>= 1;

// 原型為a = a * a % mod

a = qmul(a, a, mod) % mod;

} return res;

}// a[n]表示n*n%7

int a[50];

// b[n]表示 a[1]+a[2]+a[3]...a[n]

int b[50];

int main()

int t;

scanf("%d", &t);

while (t--)

return 0;

}

另一種求sum

for (int i = 1; i <= 42; i++) //迴圈節為42

快速冪計算(整數快速冪 矩陣快速冪)

快速冪計算 樸素演算法實現 1 ll get pow ll x,ll n 這裡的n要求不小於0,如果n小於0則令n n,並且最終返回1.0 ans即可 29 return ans 10 快速冪演算法 原理 二分 假設我們現在要計算pow x,n 那麼有當n為偶數時pow x,n pow x x,n ...

快速冪計算 pow x, n

double mypow double x,int n double ans 1 double current product x 儲存第n次迭代時的值 for unsigned long long i n i 0 i 1 for long long i n i i 2 current produc...

斐波那契數列 打表 矩陣快速冪

題意 定義乙個函式g x g x f f x 其中f x 為斐波那契數列的第x項,f 0 f 1 1。給定x求g x 答案模1e9 7。x 1e100。我們可以知道,在x很大的情況下,在模意義下斐波那契會出現迴圈,我們可以寫乙個打表程式判斷迴圈節,發現是每2 1e9 16個數迴圈。這樣我們可以求出f...