• [題解](水/數學)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;
    }
  • 相关阅读:
    LeetCode Notes_#705_设计哈希集合
    LeetCode Notes_#706_设计哈希映射
    【问题记录】用坚果云同步小书匠数据库发生冲突
    Java设计模式5
    Java设计模式4
    Java设计模式3
    Java设计模式2
    Java设计模式1
    tiantian1412/NTU-HsuanTienLin-MachineLearning
    Jing--Li / book
  • 原文地址:https://www.cnblogs.com/superminivan/p/10878153.html
Copyright © 2020-2023  润新知