UVa – 10699 – Counting the factors

#include <bits/stdc++.h>

using namespace std;

bool p[1000000];

vector<long long>prime;


void sieve(long long n)
{
    p[0]=p[1]=1;

    for(long long i=2; i<n;)
    {
        prime.push_back(i);
        for(long long j=i*i; j<n; j+=i)
            p[j]=1;
        for(++i;; i++)
        {
            if(!p[i]) break;
        }
    }
}
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    long long n,i,c,d;
    sieve(1000000);
    while(cin>>n)
    {
        if(n==0) break;
        c=0;
        d=n;
        for( i=0; i<prime.size() && prime[i]*prime[i]<=n; i++)
        {
            if(n%prime[i]==0)
            {
                c++;
                while(n%prime[i]==0)
                {
                    n/=prime[i];
                }
            }
        }
        if(n>1) c++;
        cout<<d<<" : "<<c<<endl;
    }
    return 0;
}

Leave a comment