从3开始,找(数组下标+1)%3==0 的数字 ,start: 幸运数字的下标; a[start] 幸运数字,然后找处符合条件的(然所有能被a[start]整除的序号位置的数删去)保留啥也不动,不符合条件的如果前面有符合的前移。
package com.lanqiao2013;
import java.util.Scanner;
public class LuckyNumber {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int m = scan.nextInt();
int n = scan.nextInt();
int[] a=new int[n];
//初始化
for(int i=0;i<n;i++) {
a[i]=2*i+1;
}
recur(a, 1, n);
//计算幸运数的数量
int count=0;
for(int i=0;i<n&&a[i]<=n;i++) {
if(a[i]>m&&a[i]<n) count++;
}
System.out.println(count);
}
public static void recur(int[]a,int start,int end) {
//start: 幸运数字的下标; a[start] 幸运数字
int k=start;
int e=a[start];
for(int i=start;i<end;i++) {
if((i+1)%e!=0) {
a[k]=a[i];
k++;
}
}
if(e+1<end) {
recur(a, start+1, end);
}
}
}