ConsecutiveInteger判斷給定的整數n可否表示成連續的m(m>1)個正整數之和

假定有k個連續的正整數和爲N,其中連續序列的第一個數爲x,則有x+(x+1)+(x+2)+...+(x+k-1) = N。從而能夠求得x = (N - k(k-1)/2)  /  k。當x的值小於等於0時,則說明已經沒有正整數序列的和爲N了,此時循環退出。初始化k=2,表示2個連續的正整數和爲N,則能夠求出x的值,並判斷從x開始是否存在2個連續正整數和爲N,若不存在則k++,繼續循環。java

java代碼以下:ide

public static void main(String[] args) {
        String result="NO";
        Scanner sc = new Scanner(System.in);
        int sum = sc.nextInt();
        // (N - k(k-1)/2) / k
        for ( int k=2; k < sum; k++) {
           int x=(sum - k*(k-1)/2) / k; //開始值
           int m= (sum - k*(k-1)/2) % k;
           if (x<0){
               result="NO";
               break;
           }
           if (m!=0){
               k++;
           }else {
               result="YES";
               break;
           }
        }
        System.out.println(result);
    }
相關文章
相關標籤/搜索