递归与分治

  今天总算把第三章递归与分治看完了,呵呵,没想到开头就给我来了点打击,看以后不认真学还真不行了!

  为了祝贺初战告捷,把几个简单的题目贴上来吧,纪念一下!

《整数因子分解》

大于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;
}

  代码不长,但思想很重要。分析过程就不罗嗦了,一看就应该明白了吧,呵呵,还有点时间,继续看书……

 

posted on 2013-07-29 20:38  天梦Interact  阅读(269)  评论(0)    收藏  举报