Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int SIZE = 1000+ 10 ;
  5. const int mx = 100000 + 10 ;
  6. vector < int > st ;
  7. int arr [ mx ] ;
  8. vector < int > v [ 1000000 + 10 ] ;
  9. vector<int> prime;
  10. int vis [ 1000000 + 10 ];
  11. char sieve[SIZE];
  12. void primeSieve ( int n ) {
  13. sieve[0] = sieve[1] = 1;
  14.  
  15. prime.push_back(2);
  16. for ( int i = 4; i <= n; i += 2 ) sieve[i] = 1;
  17.  
  18. int sqrtn = sqrt ( n );
  19. for ( int i = 3; i <= sqrtn; i += 2 ) {
  20. if ( sieve[i] == 0 ) {
  21. for ( int j = i * i; j <= n; j += 2 * i ) sieve[j] = 1;
  22. }
  23. }
  24.  
  25. for ( int i = 3; i <= n; i += 2 ) if ( sieve[i] == 0 ) prime.push_back(i);
  26. }
  27. void dfs ( int u ){
  28. vis [ u ] = 1;
  29. for ( int i = 0 ; i < v [ u ].size() ; i ++ ){
  30. int x = v [ u ] [ i ] ;
  31. if ( !vis [ x ]){
  32. dfs ( x );
  33. }
  34. }
  35. }
  36. void clean(){
  37. memset( &vis, 0 , sizeof ( vis ));
  38. st.clear();
  39. for ( int i = 0 ; i <=1000000 ; i ++ )v[i].clear();
  40. }
  41. int main()
  42. {
  43. // freopen("in.txt","r",stdin);
  44. // freopen("ind.txt","w",stdout);
  45. int t , l = 1 ;
  46. primeSieve( 1000 );
  47. // for ( int i = 0 ; i < prime.size() ; i ++ ) cout << prime [ i ] <<endl;
  48. scanf("%d",&t);
  49. while ( t -- ){
  50. int n ;
  51. scanf("%d",&n) ;
  52. for ( int i = 1 ; i <= n ; i ++ ) scanf("%d",arr + i ) ;
  53. int ok = 0 ;
  54. for ( int i = 1 ; i <= n ; i ++ ) {
  55. if ( arr[ i ]== 1 )ok++;
  56. int p = arr[ i ];int x = 0 ;
  57. x = arr [ i ] ;
  58. for ( int j = 0 ; j < prime.size() && prime [ j ] * prime [ j ] <= p ; j ++ ){
  59.  
  60. if ( x % prime[ j ] == 0 ){
  61. if ( vis [ prime [ j ] ] == 0 ) {
  62. st.push_back( prime [ j ]);
  63. vis [ prime [ j ] ] = 1 ;
  64. }
  65. v [ prime [ j ] ] .push_back ( arr[ i ] );
  66. v [ arr[ i ] ].push_back ( prime [ j ] );
  67. while ( x % prime [ j ] == 0 ){
  68. x /= prime [ j ];
  69. }
  70. }
  71. }
  72. if ( x != 1 ){
  73. if ( vis [ x ] == 0 ) {
  74. st.push_back( x );
  75. vis [ x ] = 1 ;
  76. }
  77. v [ x ].push_back ( arr[ i ] );
  78. v [ arr[ i ] ].push_back ( x );
  79. }
  80. }
  81.  
  82. memset( &vis , 0 , sizeof ( vis )) ;
  83. int cnt = 0 ;
  84. for ( int i = 0 ; i < st.size() ; i ++ ){
  85. int p = st [ i ] ;
  86. // cout << p << endl;
  87. if ( !vis[ p ]){
  88. dfs( p ) ;
  89. cnt ++ ;
  90. }
  91. }
  92. cnt += ok ;
  93. printf("Case %d: %d\n",l++,cnt);
  94. clean();
  95.  
  96.  
  97. }
  98.  
  99.  
  100. return 0 ;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement