• Source
    1. #include<bits/stdc++.h>
    2. #define MAX 1048580
    3.  
    4. using namespace std;
    5.  
    6. vector<int>prime;
    7.  
    8. bool check[MAX];
    9.  
    10. void sieve()
    11. {
    12. int i,j,k;
    13.  
    14. k = sqrt(MAX);
    15.  
    16. prime.push_back(2);
    17.  
    18. for(i=3; i<=k; i+=2)
    19. {
    20. if(check[i]==0)
    21. {
    22. prime.push_back(i);
    23.  
    24. for(j=i*i; j<MAX; j+=2*i)
    25. {
    26. check[j]=1;
    27. }
    28. }
    29. }
    30. }
    31.  
    32. int cntPrimeDivisor(int n)
    33. {
    34. int cnt = 0,i,len = prime.size();
    35.  
    36. for(i=0; i<len && prime[i]*prime[i]<=n; i++)
    37. {
    38. if(n%prime[i]==0)
    39. {
    40. while(n%prime[i]==0)
    41. {
    42. n/=prime[i];
    43.  
    44. cnt++;
    45. }
    46. }
    47. }
    48.  
    49. if(n>1)
    50. {
    51. cnt++;
    52. }
    53.  
    54. return (cnt==2);
    55. }
    56.  
    57. int main()
    58. {
    59. sieve();
    60.  
    61. int n,i,ans,num;
    62.  
    63. while(scanf("%d",&n)==1)
    64. {
    65. ans = 0;
    66.  
    67. for(i=1; i<=n; i++)
    68. {
    69. scanf("%d",&num);
    70.  
    71. ans+=cntPrimeDivisor(num);
    72. }
    73.  
    74. printf("%d\n",ans);
    75. }
    76.  
    77. return 0;
    78. }