国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

【C++心路歷程23】求冪的和 分治算法

2019-11-09 20:33:29
字體:
供稿:網(wǎng)友

【問題描述】

  題目很簡(jiǎn)單:請(qǐng)你計(jì)算(a^1+a^2+…+a^n) mod 1234567 的結(jié)果,其中(0 < a,n < 2^31 )。

【輸入格式】

第一行T,表示數(shù)據(jù)組數(shù),接下來的T行,每行包含a和n,表示一組數(shù)據(jù)。

【輸出格式】

對(duì)于每組數(shù)據(jù),輸出對(duì)應(yīng)的答案。

【輸入樣例】

5 1 7 3 10 5 8 9 20 17 100

【輸出樣例】

7 88572 488280 696766 550479

【數(shù)據(jù)范圍】

0< T <=1000 【分析】 首先不難想到直接用二分快速冪求解,算出每個(gè)冪的值后相加。 時(shí)間復(fù)雜度分析:O(T*log2(n!))在本題n < 2^31,T <=1000不能通過全部數(shù)據(jù)。 其次能想到等比數(shù)列運(yùn)用公式直接求解,但本題數(shù)據(jù)規(guī)模較大,且運(yùn)用除法不能取模,所以得想想其他的方法— — 由a^1+a^2+…+a^n,如果將這個(gè)式子二分,得到(a^1+a^2+…+a^(n/2))*(1+a^(n/2));則本題就迎刃而解了,運(yùn)用分治不斷遞歸求解即可。 參考:

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int T,mo=1234567;long long qkpow(int a,int p){ if(p==0) return 1; long long t=qkpow(a,p/2); if(p%2==1) return t*t%mo*a%mo; else return t*t%mo;}long long solve(int a,int n){ int m=n/2; if(n==1) return a%mo; long long ans=solve(a,n/2)*(qkpow(a,n/2)+1)%mo; //遞歸計(jì)算(a^1+a^2+…+a^(n/2))*(1+a^(n/2)) if(n%2==1) ans=(ans+qkpow(a,n))%mo; return ans; }int main(){// freopen("in.txt","r",stdin); scanf("%d",&T); while(T--) { int a,n; scanf("%d%d",&a,&n); if(a==1)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 峡江县| 永丰县| 崇阳县| 饶阳县| 固始县| 辛集市| 南宁市| 广灵县| 南皮县| 阳谷县| 涟源市| 治县。| 都昌县| 姜堰市| 新巴尔虎右旗| 宁波市| 富裕县| 哈尔滨市| 扶沟县| 凤山市| 长沙县| 永平县| 高阳县| 沭阳县| 鸡西市| 尼勒克县| 晋中市| 饶阳县| 甘孜县| 招远市| 紫金县| 铜山县| 新营市| 茶陵县| 邯郸县| 莱西市| 陆良县| 淳化县| 青铜峡市| 怀来县| 仁化县|