Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define MAX 1000005
  4.  
  5. using namespace std;
  6.  
  7. bool  prime[MAX];
  8.  
  9. ll PRIME[MAX];
  10.  
  11. int ind=0;
  12.  
  13. void seive()
  14. {
  15.     for(int i=3; i<=MAX; i+=2)
  16.         prime[i]=true;
  17.  
  18.     prime[2]=true;
  19.  
  20.     int k=sqrt(MAX);
  21.  
  22.     for(int i=3; i<=k; i+=2)
  23.     {
  24.         if(prime[i]==true)
  25.  
  26.             for(int j=i*i; j<=MAX; j+=(2*i))
  27.                 prime[j]=false;
  28.     }
  29.  
  30.     PRIME[ind++] = 2;
  31.  
  32.     for(int i=3; i<=MAX; i+=2)
  33.     {
  34.         if(prime[i])
  35.             PRIME[ind++] = i;
  36.     }
  37.  
  38. }
  39.  
  40.  
  41. int main()
  42. {
  43.  
  44.     ll n,cnt,test,b,temp;
  45.  
  46.     seive();
  47.  
  48.     scanf("%lld",&test);
  49.  
  50.     for(int t = 1; t<=test; t++)
  51.     {
  52.         cnt=1;
  53.  
  54.         ll div;
  55.  
  56.         scanf("%lld %lld",&n,&b);
  57.  
  58.         if(b*b>=n)
  59.         {
  60.             printf("Case %d: 0\n",t);
  61.         }
  62.  
  63.         else
  64.         {
  65.  
  66.             temp = n;
  67.  
  68.             for(ll i=0; PRIME[i]<=sqrt(n)&&i<ind; i++)
  69.             {
  70.                 if((n/PRIME[i])*PRIME[i]==n)
  71.                 {
  72.                     div=0;
  73.                     while((n/PRIME[i])*PRIME[i]==n)
  74.                     {
  75.                         div++;
  76.                         n/=PRIME[i];
  77.                     }
  78.  
  79.                     cnt*=(div+1);
  80.                 }
  81.             }
  82.  
  83.             if(n>1)
  84.                 cnt*=2;
  85.  
  86.             cnt/=2;
  87.  
  88.             div = 0;
  89.  
  90.             n=temp;
  91.  
  92.             for(int i=1; i<b; i++)
  93.             {
  94.                 if(n%i==0)
  95.                     div++;
  96.             }
  97.  
  98.             printf("Case %d: %lld\n",t,cnt-div);
  99.  
  100.         }
  101.  
  102.     }
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement