容斥原理
原题
一个有序数列,序列中的每一个值都能够被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));

浙公网安备 33010602011771号