Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define mp make_pair
  6. #define pb push_back
  7. #define ff first
  8. #define ss second
  9. #define LL long long
  10.  
  11. /// Graph Direction
  12.  
  13. //int dx[]={1,0,-1,0};                  int dy[]={0,1,0,-1};                // 4 Direction
  14. //int dx[]={1,1,0,-1,-1,-1,0,1};        int dy[]={0,1,1,1,0,-1,-1,-1};      // 8 direction
  15. //int dx[]={2,1,-1,-2,-2,-1,1,2};       int dy[]={1,2,2,1,-1,-2,-2,-1};     // Knight Direction
  16. //int dx[]={-1,-1,+0,+1,+1,+0};         int dy[]={-1,+1,+2,+1,-1,-2};       // Hexagonal Direction
  17.  
  18. /*
  19. LL power(LL n,LL p)
  20. {
  21.     LL ans=1;
  22.     for(LL i=1;i<=p;i++)
  23.     {
  24.         ans*=n;
  25.     }
  26.     return ans;
  27. }
  28. */
  29.  
  30. /// Bit Mask
  31.  
  32. /*
  33. int setBit(int n,int pos)
  34. {
  35.     return n|(1<<pos);
  36. }
  37.  
  38. int resetBit(int n,int pos)
  39. {
  40.     return n&~(1<<pos);
  41. }
  42.  
  43. bool checkBit(int n,int pos)
  44. {
  45.     return n&(1<<pos);
  46. }
  47. */
  48.  
  49. /// Number Theory
  50.  
  51.  
  52. int p[1111111];
  53. //int segp[1111111];
  54. vector<int> prime;
  55. //vector<int> factors;
  56.  
  57. LL primeFactorization(LL n)
  58. {
  59.     LL ans=1;
  60.     for(int i=0;i<prime.size()&&prime[i]<=sqrt(n);i++)
  61.     {
  62.         if(p[n]==0)
  63.         {
  64.             break;
  65.         }
  66.         if(n%prime[i]==0)
  67.         {
  68.             LL cnt=0;
  69.             while(n%prime[i]==0)
  70.             {
  71.                 cnt++;
  72.                 //factors.push_back(prime[i]);
  73.                 n/=prime[i];
  74.             }
  75.             ans*=(cnt+1);
  76.         }
  77.     }
  78.     if(n!=1)
  79.     {
  80.         //factors.push_back(n);
  81.         ans*=2;
  82.     }
  83.     return ans;
  84. }
  85.  
  86. /*LL GCD(LL a,LL b)
  87. {
  88.     while(b!=0)
  89.     {
  90.         a=a%b;
  91.         int c=a;
  92.         a=b;
  93.         b=c;
  94.     }
  95.     return a;
  96. }*/
  97.  
  98. /*LL LCM(LL a,LL b)
  99. {
  100.     return a*(b/GCD(a,b));
  101. }
  102.  
  103. LL ext_gcd(LL A,LL B,LL *X,LL *Y )
  104. {
  105.     LL x2,y2,x1,y1,x,y,r2,r1,q,r;
  106.     x2=1;y2=0;
  107.     x1=0;y1=1;
  108.     for(r2=A,r1=B;r1!=0;r2=r1,r1=r,x2=x1,y2=y1,x1=x,y1=y)
  109.     {
  110.         q=r2/r1;
  111.         r=r2%r1;
  112.         x=x2-(q*x1);
  113.         y=y2-(q*y1);
  114.     }
  115.     *X=x2;*Y=y2;
  116.     return r2;
  117. }*/
  118.  
  119. /*LL modInv(LL a,LL m )
  120. {
  121.     LL x,y;
  122.     ext_gcd(a,m,&x,&y);
  123.     x%=m;
  124.     if(x<0) x+=m;
  125.     return x;
  126. }*/
  127.  
  128. /*LL bigMod(LL b,LL p,LL m)
  129. {
  130.     LL ans=1%m;
  131.     LL x=b%m;
  132.     while(p)
  133.     {
  134.         if(p&1)
  135.         {
  136.             ans=(ans*x)%m;
  137.         }
  138.         x=(x*x)%m;
  139.         p>>=1;
  140.     }
  141.     return ans;
  142. }*/
  143.  
  144. void sieve(int n)
  145. {
  146.     memset(p,0,sizeof(p));
  147.     p[0]=p[1]= 1;
  148.     for(int i=4;i<=n;i+=2)
  149.     {
  150.         p[i]=1;
  151.     }
  152.     for(int i=3;i<=sqrt(n);i+=2)
  153.     {
  154.         if(p[i]==0)
  155.         {
  156.             for(int j=i*i;j<=n;j+=i)
  157.             {
  158.                 p[j]=1;
  159.             }
  160.         }
  161.     }
  162. }
  163.  
  164. /*LL segSieve(LL a,LL b)
  165. {
  166.     if(a==1)
  167.     {
  168.         a++;
  169.     }
  170.     memset(segp,0,sizeof(segp));
  171.     for(int i=0;prime[i]<=sqrt(b);i++)
  172.     {
  173.         LL x=prime[i];
  174.         LL j=x*x;
  175.         if(j<a)
  176.         {
  177.             j=ceil(1.0*a/x)*x;
  178.         }
  179.         while(j<=b)
  180.         {
  181.             segp[(int)(j-a)]=1;
  182.             j+=x;
  183.         }
  184.     }
  185.     LL ans=0;
  186.     for(LL i=a;i<=b;i++)
  187.     {
  188.         if(segp[(int)(i-a)]==0)
  189.         {
  190.             ans++;
  191.         }
  192.     }
  193.     return ans;
  194. }*/
  195.  
  196. /*LL eulerPhi(LL n)
  197. {
  198.     LL ans=n;
  199.     LL sqrtn=sqrt(n);
  200.     for(int i=0;i<prime.size()&&prime[i]<=sqrtn;i++)
  201.     {
  202.         if(n%prime[i]==0)
  203.         {
  204.             while(n%prime[i]==0)
  205.             {
  206.                 n/=prime[i];
  207.             }
  208.             sqrtn=sqrt(n);
  209.             ans/=prime[i];
  210.             ans*=prime[i] - 1;
  211.         }
  212.     }
  213.     if(n!=1)
  214.     {
  215.         ans/=n;
  216.         ans*=n-1;
  217.     }
  218.     return ans;
  219. }*/
  220.  
  221. /// Segment Tree
  222.  
  223. /*
  224.  
  225. int a[1111111];
  226. int tree[4444444];
  227.  
  228. void init(int node,int b,int e)
  229. {
  230.     if(b==e)
  231.     {
  232.         tree[node]=a[b];
  233.         return;
  234.     }
  235.     int L=2*node;
  236.     int R=2*node+1;
  237.     int mid=(b+e)/2;
  238.     init(L,b,mid);
  239.     init(R,mid+1,e);
  240.     tree[node]=tree[L]+tree[R];
  241. }
  242.  
  243. void update(int node,int b,int e,int index,LL value)
  244. {
  245.     if(index<b||index>e)
  246.     {
  247.         return;
  248.     }
  249.     if(b==e)
  250.     {
  251.         tree[node]=value;
  252.         return;
  253.     }
  254.     int L=2*node;
  255.     int R=2*node+1;
  256.     int mid=(b+e)/2;
  257.     update(L,b,mid,index,value);
  258.     update(R,mid+1,e,index,value);
  259.     tree[node]=tree[L]+tree[R];
  260. }
  261.  
  262. LL query(int node,int b,int e,int i,int j)
  263. {
  264.     if(j<b||i>e)
  265.     {
  266.         return 0;
  267.     }
  268.     if(b>=i&&e<=j)
  269.     {
  270.         return tree[node];
  271.     }
  272.     int L=2*node;
  273.     int R=2*node+1;
  274.     int mid=(b+e)/2;
  275.     LL first=query(L,b,mid,i,j);
  276.     LL second=query(R,mid+1,e,i,j);
  277.     return first+second;
  278. }
  279. */
  280.  
  281.  
  282. int tc;
  283. LL a,b;
  284.  
  285.  
  286. int main(void)
  287. {
  288.     sieve(1111100);
  289.     for(int i=2;i<1111000;i++)
  290.     {
  291.         if(p[i]==0)
  292.         {
  293.             prime.pb(i);
  294.         }
  295.     }
  296.     scanf("%d",&tc);
  297.     for(int t=1;t<=tc;t++)
  298.     {
  299.         scanf("%lld%lld",&a,&b);
  300.         if(b*b>=a)
  301.         {
  302.             printf("Case %d: 0\n",t);
  303.             continue;
  304.         }
  305.         LL pf=primeFactorization(a);
  306.         pf/=2;
  307.         LL ex=0;
  308.         for(int i=1;i<b;i++)
  309.         {
  310.             if(a%i==0)
  311.             {
  312.                 ex++;
  313.             }
  314.         }
  315.         printf("Case %d: %lld\n",t,pf-ex);
  316.     }
  317.     return 0;
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement