Pagini recente » Cod sursa (job #2141445) | Cod sursa (job #940415) | Cod sursa (job #1287547) | Cod sursa (job #1259225) | Cod sursa (job #2354573)
#include <cstdio>
#include<fstream>
#define nmax 1000010
#define modulo 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool v[nmax];
int prim[nmax/2],k=0;
void ssnd(int &suma,int &nr, long long n)
{
int p;
long long q=1;
nr=1;
suma=1;
for(int i=0;i<k && 1LL*prim[i]*prim[i]<=n;i++)
{
if(n%prim[i]) continue;
p=1;
q=prim[i];
while (n%prim[i]==0)
{
n/=prim[i];
p++;
q*=prim[i];
}
nr*=p;
suma=(suma*(q-1)/(prim[i]-1))%modulo;
}
if (n>1) {
nr*=2;
suma = (1LL*suma*(n+1)) % modulo;
}
}
int main() {
int t;
long long n;
int suma,nr;
//generez, cu ciurul lui eratostene, toate nr prime <=10^6
int i=2,j;
while(i<nmax)
{
if(v[i]==0) {
//deci i e numar prim
prim[k++]=i;
//notez in tot vectorul
for(j=i+i; j<nmax; j+=i)
v[j]=1;
}
i++;
}
f>>t;
for(i=0; i<t; i++)
{
f>>n;
ssnd(suma,nr,n);
g<<nr<<" "<<suma<<"\n";
}
return 0;
}