容斥原理

 

原题

一个有序数列,序列中的每一个值都能够被2或者3或者5所整除,这个序列的初始值从1开始,但是1并不在这个数列中。求第1500个值是多少?

 

A为能被2整除的集合数

B为能被3整除的集合数

C为能被5整除的集合数

用维恩图来表示集合A、B和C

 

x/2 + x/3 + x/5 - x/(2*3) - x/(2*5) - x/(3*5) + x/(2*3*5) = 1500

x = (1500*2*3*5) / (3*5+2*5+2*3-5-3-2+1)

x = 2045

 Java实现

int[] arr = {2,3,5};
        int num = 1500;
        int gbs = 1;
        int sum = 0;
        for(int i=0;i<arr.length;i++){
            gbs=gbs*arr[i];
            sum+=arr[i];
        }
        
        int allSum = 0;
        for(int i=0;i<arr.length;i++){
            for(int j=i+1;j<arr.length;j++){
                allSum+=arr[i]*arr[j];
            }
        }
        
        System.out.println(num*gbs/(allSum-sum + 1));

 

posted @ 2018-02-01 17:22  图生  阅读(152)  评论(0)    收藏  举报