Cod sursa(job #581688)

Utilizator informatician28Andrei Dinu informatician28 Data 14 aprilie 2011 15:02:37
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>    
using namespace std;    
ifstream f("ssnd.in");    
ofstream g("ssnd.out");    
int prim[1000001];   
int maxim; 
void ciur()  
{ int a,b; 
for(a=2;a*a<=maxim;a++)      
prim[a]=1;  
for(a=2;a*a<=maxim;a++)  
if(prim[a])       
for(b=a*a;b*b<=maxim;b+=a)            
prim[b]=0;   
}     
int powA(int baza, int exponent)   
{int k,putere;   
putere=1;    
for(k=1;k<=exponent+1;k++)        
putere*=baza;   
return putere;    
}   
int main()    
{ int nrdiv,sumadiv,j,i,t,fm,v[1001];  
f>>t;     
for(j=1;j<=t;j++) 
{f>>v[j]; if(maxim<v[j]) maxim=v[j];} ciur(); 
for(j=1;j<=t;j++)  
{ nrdiv=sumadiv=1;   
if(prim[v[j]]) {nrdiv*=2; sumadiv*=(1+v[j]);} else 
{i=2;    
do{fm=0;  
while(v[j]%i==0 )        
{fm++;         
v[j]/=i;}        
nrdiv*=(fm+1);          
sumadiv*=(powA(i,fm)-1)/(i-1);   
i++;  
}while(v[j]!=1);    
}g<<nrdiv<<" "<<sumadiv%9973<<'\n';}  
}