递归与分治
今天总算把第三章递归与分治看完了,呵呵,没想到开头就给我来了点打击,看以后不认真学还真不行了!
为了祝贺初战告捷,把几个简单的题目贴上来吧,纪念一下!
《整数因子分解》
大于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;
}
代码不长,但思想很重要。分析过程就不罗嗦了,一看就应该明白了吧,呵呵,还有点时间,继续看书……
书山有路勤为径,学海无涯苦作舟!!!
浙公网安备 33010602011771号