Cod sursa(job #2467431)
| Utilizator | Data | 4 octombrie 2019 13:28:30 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.09 kb |
#include <iostream>
#include <fstream>
#define mod 9973
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
long long n,s,a[80005];
int t,ind,nd,ok,cm,exp;
bool b[1000005];
int main()
{
a[++ind]=2;
for(int i=3;i<=1000000;i+=2)
{
if(!b[i])
{
a[++ind]=i;
for(int j=i+i;j<=1000000;j+=i)
{
b[j]=1;
}
}
}
in>>t;
for(int j=1;j<=t;j++)
{
in>>n;
s=1;
nd=1;
for(int i=1;a[i]*a[i]<=n;i++)
{
exp=0;
ok=0;
cm=1;
if(n%a[i]==0)ok=1;
while(n%a[i]==0)
{
n/=a[i];
exp++;
cm*=a[i];
}
if(ok)
{
s=(s*((cm*a[i]-1)/(a[i]-1))%mod);
nd=nd*(exp+1);
}
}
if(n>1)
{
s=(s*((n*n-1)/(n-1)))%mod;
nd=nd*2;
}
out<<nd<<' '<<s<<'\n';
}
return 0;
}
