题目不难,弄个数组弄个标记,弄几个循环就可以了。 import java.util.Scanner; public class Main{ public static void main(String[] args)throws Exception{ Scanner cin=new Scanner(System.in); int caseNum=cin.nextInt(); boolean[] Tag; while(cin.hasNext()){ int n=cin.nextInt(); int m=0; Tag=new boolean[n]; for(int i=0;i<n;i++){ Tag[i]=false; } for(int i=1;i<n;i++){ for(int j=1;i*j+j-1<n;j++){ int k=i*j+j-1; Tag[k]= Tag[k]==false ? true : false ; } } for(int i=0;i<n;i++){ if(Tag[i]==false)m++; } System.out.println(m); } } }