zoukankan      html  css  js  c++  java
  • [題解](水/數學)luogu_P1147連續自然數和

    尺取法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
    ",i,j),j++,sum+=j;
        }
        if(i+j==m)printf("%d %d
    ",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;
    }
  • 相关阅读:
    检测是否安装了新包
    redux和mobx的比较
    ssh登录远程服务器
    法律
    如何解决二方包彼此依赖?
    创业
    【转】裸辞4个月,面试30家公司。
    添加群机器人
    RESTful状态码说明
    MongoDB简单介绍以及基本命令
  • 原文地址:https://www.cnblogs.com/superminivan/p/10878153.html
Copyright © 2011-2022 走看看