日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1922. 统计好数字的数目(快速幂)

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1922. 统计好数字的数目(快速幂) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

我們稱一個數字字符串是 好數字 當它滿足(下標從 0 開始)偶數 下標處的數字為 偶數奇數 下標處的數字為 質數 (2,3,5 或 7)。

比方說,“2582” 是好數字,因為偶數下標處的數字(2 和 8)是偶數且奇數下標處的數字(5 和 2)為質數。
但 “3245” 不是 好數字,因為 3 在偶數下標處但不是偶數。

給你一個整數 n ,請你返回長度為 n 且為好數字的數字字符串 總數 。
由于答案可能會很大,請你將它對 10^9 + 7 取余后返回 。

一個 數字字符串 是每一位都由 0 到 9 組成的字符串,且可能包含前導 0 。

示例 1: 輸入:n = 1 輸出:5 解釋:長度為 1 的好數字包括 "0""2""4""6""8" 。示例 2: 輸入:n = 4 輸出:400示例 3: 輸入:n = 50 輸出:564908303提示: 1 <= n <= 10^15

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/count-good-numbers
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 數據范圍很大,直接做會吃T 超時的(如下)
class Solution { public:int countGoodNumbers(long long n) {long long odd = 0, even = 5, mod = 1e9+7;bool flag = true;while(--n){if(flag)odd = even*4%mod;elseeven = odd*5%mod;flag = !flag;}return flag ? even : odd;} };
  • 可以發現,這不就是求 4x5y4^x5^y4x5y 嗎,數據很大,可以快速冪+取模
  • 可以做掉 LeetCode 50. Pow(x, n)
class Solution {int mod = 1e9+7; public:int countGoodNumbers(long long n) {long long y = (n+1)/2, x = n/2;return (quickpow(4,x)*quickpow(5,y))%mod;}long long quickpow(long long a, long long x){long long ans = 1, p = a;while(x){if(x&1){ans = (ans*p)%mod;}p = (p*p)%mod;x >>= 1;}return ans;} };

0 ms 5.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1922. 统计好数字的数目(快速幂)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。