UVA 294

Don't copy without trying.

#include<bits/stdc++.h>
using namespace std;
int status[100000000/32];
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
int Set(int N,int pos){ return N=N | (1<<pos);}
long long int arr[10000000];
long long int l=0,a,b=31700,n;


void sieve()
{
     long long int i,j,sqrtN;
     sqrtN = int( sqrt( b ) );
     for( i=3; i<=sqrtN; i+=2 )
     {
   if( Check(status[i/32],i%32)==0)
   {
     for(j=i*i; j<=b; j+=2*i)
    {
     status[j/32]=Set(status[j/32],j%32);
     }
   }
    }
    arr[0]=2;
    l=1;
     for(i=3;i<=b;i+=2){
            if(Check(status[i/32],i%32)==0){
                arr[l]=i;
                l++;
        }
     }
}

long long int p[1000000];
long long int e[1000000];
int nk=0;

void decomp(long long int a)
{
    long long int sqrtA=sqrt(a);
    for(long long int i=0; i<l && arr[i]<=sqrtA; i++)
    {
        int count=0;
        /*if(Check(status[a/32],a%32)==0)
        {
            break;
        }*/
        if(a%arr[i]==0)
        {
            while(a%arr[i]==0)
            {
                count++;
                a=a/arr[i];
            }

            if(count>0)
            {
                p[nk]=arr[i];
                e[nk]=count;
                nk++;
            }
        }
        sqrtA=sqrt(a);
    }
    if(a!=1)    ///for last prime
    {
        p[nk]=a;
        e[nk]=1;
        nk++;
    }
}

int main()
{
        sieve();  ///sieve must be out of any loop

    long long int a,b=1,c,k=0,d,l=0;
    cin>>c;
    for(long long int j=0; j<c; j++){
    cin>>a>>d;
    for(int i=a; i<=d; i++)
    {
        decomp(i);
        for(int x=0; x<nk; x++)
            {
                b=b*(e[x]+1);
                //cout<<b<<endl;
            }
            if(k<b)
            {
                k=b;
                l=i;
            }
        b=1;
        nk=0;
    }
    cout<<"Between "<<a<<" and "<<d<<", "<<l<<" has a maximum of "<<k<<" divisors."<<endl;
    nk=0;
    l=0;
    k=0;
    }
    return 0;
}

Comments

Popular posts from this blog

C++ STL practice problem link

Binary Index Tree(BIT)

Combinatorics