Advertisement
Guest User

Untitled

a guest
May 26th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAXSIZE 10000001
  3. #define ii long long int
  4.  
  5. using namespace std;
  6.  
  7. int prime_arraysize;
  8. int status[MAXSIZE];
  9. int prime[MAXSIZE]; // this will contain the primes
  10.  
  11. void seive() {
  12.  
  13. /// status[i]==1 -> i is not prime
  14. /// status[i]==0 -> i is prime
  15. status[0]=1;
  16. status[1]=1;
  17. for(int i=4;i<=MAXSIZE;i+=2)
  18. {
  19. status[i]=1;
  20. }
  21. for (int p=3; p*p<=MAXSIZE; p+=2)
  22. {
  23.  
  24. if (!status[p])
  25. {
  26.  
  27. for (int i=p*p; i<=MAXSIZE; i += 2*p)
  28. status[i] = 1;
  29. }
  30. }
  31.  
  32. prime_arraysize=0;
  33. for(int i = 2; i <= MAXSIZE; i++ ) {
  34. if( status[i] == 0 ) {
  35. // so, i is prime
  36. prime[prime_arraysize++]=i;
  37. }
  38. }
  39. }
  40.  
  41. ii max(ii a,ii b)
  42. {
  43. if(a>b)
  44. return a;
  45. else
  46. return b;
  47. }
  48.  
  49. ii primeFactorize( ii n ) {
  50. ii sqrtN = (ii)( sqrt(n) );
  51. ii mm=0;
  52. int ff=0;
  53. for( int i = 0;i<prime_arraysize && prime[i] <= sqrtN; i++ ) {
  54. if( n % prime[i] == 0 ) {
  55. ff++;
  56. while( n % prime[i] == 0 ) {
  57. n /= prime[i];
  58. mm=max(mm,prime[i]);
  59. }
  60. sqrtN=(ii)(sqrt(n));
  61. }
  62. }
  63. if( n > 1 ) {
  64. ff++;
  65. mm=max(mm,n);
  66. }
  67. if(ff==1)
  68. return -1;
  69. return mm;
  70. }
  71.  
  72. int main() {
  73. // freopen("in.txt","r",stdin);
  74. // freopen("out.txt","w",stdout);
  75. seive();
  76. ii N;
  77. while(scanf("%lld",&N)==1)
  78. {
  79. if(N==0)
  80. break;
  81. if(N==1)
  82. {
  83. printf("-1\n");
  84. continue;
  85. }
  86. ii ans=primeFactorize(N);
  87. if(ans!=N)
  88. printf("%lld\n",ans);
  89. else
  90. printf("-1\n");
  91. }
  92. return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement