বৃহস্পতিবার, ৩১ আগস্ট, ২০১৭

UVA 10290 - {Sum+=i++} to Reach N

#include <bits/stdc++.h>
using namespace std;
#define sze 10000100
bool vis[sze];
vector<long long>ar;
void sieve()
{
    long long i,j;
    for(i=3; i<sze; i+=2)
    {
        if(vis[i]==0)
        {
            ar.push_back(i);
            for(j=2*i; j<sze; j+=(i))
            {
                vis[j]=1;
            }
        }
    }
}
long long check(long long a)
{
    long long ans=1,i1,xx=sqrt(a);
    while(a%2==0)
    {
        a/=2;
    }
    for(i1=0; ar[i1]<=xx&&i1<ar.size(); i1++)
    {
        if(a%ar[i1]==0)
        {
            long long cnt=0;
            while(a%ar[i1]==0)
            {
                a/=ar[i1];
                cnt++;
            }
            ans*=(cnt+1);
        }
        xx=sqrt(a);
    }
    if(a>1)
    {
        ans*=2;
    }
    return ans-1;
}
int main()
{
    sieve();
    long long n;
    while(cin>>n)
    {
        if(n>=3)
        printf("%lld\n",check(n)+1);
        else
            printf("1\n");
    }
    return 0;
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...