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