Pagini recente » Cod sursa (job #1251575) | Cod sursa (job #2351307) | Cod sursa (job #2138443) | Cod sursa (job #989638) | Cod sursa (job #716875)
Cod sursa(job #716875)
#include <fstream>
#include <utility>
#define f first
#define s second
#define mp make_pair
using namespace std;
bool neprim[1000010];
int factor,suma,prime[300010],numar,nrf,k;
pair<int,int> euclid(int a,int b)
{
pair<int,int>e;
if(b==0) return mp(1,0);
e=euclid(b,a%b);
swap(e.f,e.s);
e.s-=e.f*(a/b);
return e;
}
void ciur()
{
for(int i=2;i<=1000000;i++)
if(!neprim[i])
{
prime[++k]=i;
for(int j=2*i;j<=1000000;j+=i) neprim[j]=1;
}
}
int main()
{
pair<int,int>e;
int t,n,i;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
ciur();
fi>>t;
int mod=9973;
while(t--)
{
fi>>n;
int radical=(int)sqrt((double)n);
numar=1; suma=1;
for(i=1;i<=k and prime[i]<=radical and prime[i]<=n;i++)
if(n%prime[i]==0)
{
nrf=0;
factor=prime[i]%mod;
while(n%prime[i]==0) { n/=prime[i]; nrf++; factor=(factor*prime[i])%mod; }
factor--; if(factor<0) factor+=mod;
e=euclid(prime[i]-1,mod);
while(e.f<=0) e.f+=mod;
suma=(suma*e.f)%mod;
suma=(suma*factor)%mod;
numar=(numar*(nrf+1))%mod;
}
if(n!=1)
{
numar=(numar*2)%mod;
suma=(suma*(((n*n-1)/(n-1))%mod))%mod;
}
fo<<numar<<" "<<suma<<"\n";
}
}