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);
    }
相关文章
相关标签/搜索