Cod sursa(job #582253)

Utilizator informatician28Andrei Dinu informatician28 Data 15 aprilie 2011 09:32:23
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>   
#include<cmath>
using namespace std;   
ifstream f("ssnd.in");   
ofstream g("ssnd.out");   
long long prim[1000001],ma,i,j;  
void ciur() 
{double a;
a=sqrt(ma);
	for(i=2;i<=a;i++)     
prim[i]=1; 
for(i=2;i<=a;i++) 
if(prim[i])      
for(j=i*i;j<=a;j+=i)           
prim[j]=0;  
}    
long long putere(long long expo) 
{long long k,p; 
p=1; 
for(k=1;k<=expo+1;k++)  
    
p*=i;  
return p;  
} 
int main()   
{ long long nr,suma; 
int t,fm,v[1001]; 
f>>t;    
for(j=1;j<=t;j++) 
{f>>v[j]; if(ma<v[j]) ma=v[j];} ciur(); 
for(j=1;j<=t;j++) 
{ nr=suma=1; 
if(prim[v[j]]) {nr*=2; suma*=(1+v[j]);} 
else {i=2;    
do
{fm=0; 
while(v[j]%i==0)       
{fm++;        
v[j]/=i;}       
nr*=(fm+1); 
suma*=(putere(fm)-1)/(i-1); 
 
 
if(prim[v[j]]==0 ) i++;  
else i=v[j]; 
}  
while(v[j]!=1); 
}g<<nr<<" "<<suma%9973<<'\n';} 
}