A给出一个数x,B每次猜一个y,A回答B,x是否可以被y整除,求出要猜的最小次数和需要猜的数。
枚举每个素数p,可以知道如果p^k<=n,则p^k一定需要选
Sample test(s)
input4output32 4 3 input6output42 4 3 5
1 # include2 # include 3 # include 4 # include 5 # include 6 # include 7 # include 8 # include 9 # define LL long long10 using namespace std ;11 12 int ans[1010] ;13 14 bool isp (int val )15 {16 int i ;17 if (val == 1)18 return 0 ;19 for (i = 2 ; i*i <= val ; i++)20 {21 if (val % i == 0)22 return 0 ;23 }24 return 1 ;25 26 }27 28 int main()29 {30 //freopen("in.txt","r",stdin) ;31 int n ;32 while(scanf("%d",&n ) != EOF)33 {34 int i ;35 int l = 0 ;36 if (n == 1)37 {38 printf("0\n") ;39 continue ;40 }41 42 for (i = 2 ; i <= n ; i++)43 {44 if (isp(i) == 0)45 continue ;46 int p = i ;47 while(p <= n)48 {49 ans[l] = p ;50 l++ ;51 p *= i ;52 }53 }54 printf("%d\n" , l) ;55 for (i = 0 ; i < l-1 ; i++)56 printf("%d " , ans[i]) ;57 printf("%d\n" , ans[i]) ;58 }59 60 61 62 return 0;63 }