2018.1.10D连续整数的和

把一个给定的数N写成连续的若干个数之和的形式,若可以输出连续整数中的第一个数字。

一开始随手枚举,直接TE。思考优化,然后想到用等比数列。

对于给定的N,以1为开头则最多有k个数字,而k>=2且小于等于sqrt(2*N)(由等差数列求和公式有k(k+1)=2N)

a1*k+(1+...+k-1)=N即a1*k+(k)(k-1)/2=N即若(N-(k)(k-1)/2)%k=0即可说明存在,再将a1输出

#include<stdio.h>
int main()
{
    int i,sum,flag=0,t;
    scanf("%d",&sum);
    for (i=sqrt(sum*2-0.5);i>=2;i--)
    {
         if((sum-i*(i-1)/2)%i==0) {printf("%d\n",(sum-i*(i-1)/2)/i);flag=1;}
    }
    if (flag==0) printf("No Solution\n");
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值