码迷,mamicode.com
首页 > 其他好文 > 详细

[題解](水/數學)luogu_P1147連續自然數和

时间:2019-05-16 21:40:50      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:特殊   整数   for   方程组   pre   cst   span   mes   i++   

尺取法a掉

然而數學解法為

等差數列求和公式:

sum(L,R)=(L+R)(R-L+1)/2=M

(L+R)(R-L+1)=2M

可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1<K2时,

可以列一个二元一次方程组

R-L+1=K1

L+R=K2 解得L=(K2-K1+1)/2, R=(K1+K2-1)/2

当K1,K2一奇一偶时,L,R才有自然数解.

不过有一种特殊情况,就是L=R的情况,这种情况是不允许的

即(K2-K1+1)/2≠(K1+K2-1)/2,解得K1≠1

尺取瞎搞:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int m;
int main(){
    scanf("%d",&m);
    int i=0,j=0,sum=0;
    while(i+j<m){
        while(sum<m)j++,sum+=j;
        while(sum>m)sum-=i,i++;
        if(sum==m)printf("%d %d\n",i,j),j++,sum+=j;
    }
    if(i+j==m)printf("%d %d\n",i,j);
}

數學(題解

#include<bits/stdc++.h>
using namespace std;
int m;
int main(){
    cin>>m;
    for(int k1=sqrt(2*m);k1>1;k1--)//枚举k1(注意是k1>1而不是k1>=1)
        if(2*m%k1==0 && (k1+2*m/k1)%2){//如果K2是整数而且与K1一奇一偶
            int k2=2*m/k1;
                cout<<(k2-k1+1)/2<<" "<<(k1+k2-1)/2<<endl;//输出答案
        }
    return 0;
}

 

[題解](水/數學)luogu_P1147連續自然數和

标签:特殊   整数   for   方程组   pre   cst   span   mes   i++   

原文地址:https://www.cnblogs.com/superminivan/p/10878153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!