題意:
今天星期六,求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...