筛选法,嘿嘿,看了大牛的代码的……
#include<stdio.h> #include<string.h> int n,num[40000]; int main( ) { int t; scanf( "%d",&t ); num[0] = num[1] = 0; while( t-- ) { scanf( "%d",&n ); memset( num,0,sizeof( num ) ); for( int i = 2; i <= n / 2; ++i ) for( int j = 1; j * i < n; ++j )//从1开始,因为i可能也是n的约数 {//找出和n有相同约数的数 if( n % i )//如果不是约数,就不要遍历 break; else num[i*j] = 1; } int sum = 0; for( int i = 1; i < n; ++i ) if( !num[i] ) ++sum;//找新朋友 printf( "%d\n",sum ); } return 0; }