SPOJ - DIVSUM - Divisor Summation
Problem Link: https://www.spoj.com/problems/DIVSUM/en/
Code:
#include <bits/stdc++.h>
using namespace std;
#define mx 500002
char a[mx];
vector <int> v;
void sieve()
{
memset(a,0,sizeof(a));
for(int i=4;i<=mx;i+=2)
a[i]=1;
for(int i=3;i<=sqrt(mx);i+=2)
{
if(a[i]==0)
{
for(int j=i*i;j<=mx;j+=i)
a[j]=1;
}
}
v.push_back(2);
for(int i=3;i<mx;i+=2)
{
if(a[i]==0)
v.push_back(i);
}
}
int main()
{
int t;
sieve();
cin>>t;
while(t--)
{
int n;
cin>>n;
int f=n;
long long res=1;
for(int i=0;v[i]<=sqrt(n);i++)
{
if(n%v[i]==0)
{
long long p=1,temp=1;
while(n%v[i]==0)
{
n/=v[i];
p*=v[i];
temp+=p;
}
res*=temp;
}
}
if(n!=1)
{
res*=(1+n);
}
res-=f;
cout<<res<<endl;
}
return 0;
}
No comments:
Post a Comment