? 今天總算把第三章遞歸與分治看完了,呵呵,沒想到開頭就給我來了點打擊,看以后不認真學還真不行了!
? 為了祝賀初戰告捷,把幾個簡單的題目貼上來吧,紀念一下!
《整數因子分解》
大于1的正整數n可以分解為: n=X1*X2*```*Xn;
當n=12時,共有8種不同的分解式:
12=12
12=6*2
12=4*3
12=3*4
12=3*2*2
12=2*6
12=2*3*2
12=2*2*3
對于給定的正整數n,編程計算n共有多少種不同的分解式。
輸入
數據有多行,給出正整數n(1≤n≤2000000000)。
輸出
每個數據輸出1行,是正整數n的不同的分解式數量。
代碼為:
#include<iostream>
using namespace std;
int total;
int solve(int n)
{if(n==1) total++;else for(int i=2;i<=n;i++)if(n%i==0)solve(n/i);
}
int main ()
{int n;cin>>n;total=0;solve(n);cout<<total;return 0;
}
《取余運算》
輸入三個正整數a,p,k ,求a^p%k 的值。
輸入
輸入有多組測試例。
對每組測試例,有三個正整數a,p,k (0<a,p,k2 <232)。
輸出
對每組測試例輸出1行,是a^p%k 的值。
樣例輸入:
1 10 9
3 18132 17
輸出:
7
13
代碼:
#include<iostream>
#include<iomanip>
using namespace std;
int mod(int a,int p,int k)
{if (p==1)return a%k;if (p%2)return mod(a%k,p-1,k)*a%k;else return mod((a*a)%k,p/2,k);
}
int main()
{unsigned a,p,k;while(cin>>a>>p>>k)cout<<mod(a,p,k)<<endl;return 0;
}
代碼不長,但思想很重要。分析過程就不羅嗦了,一看就應該明白了吧,呵呵,還有點時間,繼續看書……
?