Cod sursa(job #581573)

Utilizator informatician28Andrei Dinu informatician28 Data 14 aprilie 2011 12:55:25
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>   
using namespace std;   
ifstream f("ssnd.in");   
ofstream g("ssnd.out");   
char prim[1000001];  
long long maxim;
void ciur() 
{int a,b; 

for(a=1;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;  
}    
long long powA(long long baza, long long exponent)  
{long long k,putere;  
putere=1;   
for(k=1;k<=exponent+1;k++)  
    
putere*=baza;  
return putere;   
}  
int main()   
{ long long nrdiv,sumadiv,j,i; int 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';} 
}