整数拆分

来源:互联网 发布:网络机顶盒插上u盘 编辑:程序博客网 时间:2024/06/04 17:44

整数拆分
题目描述

对于给定的正整数S,将其拆分为不少于三个正整数的升序等差数列的和的形式。 例如,对于S = 9,共有如下两种拆分方案:
         9 = 1 + 3 + 5;
         9 = 2 + 3 + 4
当然,并不是所有的正整数都能做到这种拆分。现在求拆分方案数。

输入描述

输入为一行,其中只有一个整数S
输出描述
一个整数,为整数S对应的拆分方案数

#include <iostream>#include <cmath>using namespace std;int i = 1, j = 1;int main(){    int s;    cin >> s;    s = s * 2;    int sum;    for (i = 3; i <= (int) sqrt(s); i++) //枚举项数    {        if (s % i == 0)        {            int t = s / i; //首尾项的和            for (j = 1; j <= t/(i - 1); j++) //枚举公差            {                if ((t + (i - 1) * j) % 2 != 0)                    continue;                int an = (t + (i - 1) * j) / 2;                int a1 = t - an;                if (a1 > 0 && an > 0)                    sum++;            }        }    }    cout << sum << endl;    return 0;}
1 0
原创粉丝点击