Pagini recente » Cod sursa (job #2515266) | Cod sursa (job #2533597) | Cod sursa (job #144515) | Cod sursa (job #1732402) | Cod sursa (job #32715)
Cod sursa(job #32715)
#include<stdio.h>
#include<math.h>
#include<string.h>
int nr[1000002],num[1000002],prim[100000];
int main(){
FILE*in=fopen("fractii.in","r");
FILE*out=fopen("fractii.out","w");
int n,i,j,pr,a;
fscanf(in,"%d",&n);
if(n==1){
fprintf(out,"1\n");
return 0;
}
if(n==2){
fprintf(out,"3\n");
return 0;
}
i=4;
while(i<=n){
nr[i]=1;
i=i+2;
}
for(i=3;i<=n+10;i=i+2){
pr=1;
if(nr[i]==0){
for(j=3;((j*j<=i)&&(pr));j=j+2){
if(i%j==0)
pr=0;
}
if(pr){
j=i+i;
while(j<=n){
nr[j]=1;
j=j+i;
}
}
}
}
prim[0]=2;
j=1;
for(i=3;i<=n+10;i=i+2){
if(nr[i]==0){
prim[j]=i;
j++;
}
}
i=0;
long long s;
int p=0,put;
put=2;
while(put<=n){
num[put]=1;
p++;
put=put*2;
}
if(n%2==0)
s=n+p*n/2;
if(n%2==1)
s=n+p*(n/2+1);
for(i=3;i<=n;i++){
memset(nr,0,(n+1)*4);
pr=1;
j=1;
p=0;
put=i;
if(num[i]==0){
while(prim[j]<=i){
if(i%prim[j]==0){
a=prim[j];
while(a<=n){
nr[a]=1;
a=a+prim[j];
}
pr=0;
}
j++;
}
while(put<=n){
num[put]=1;
p++;
put=put*i;
}
if(i%2==1){
for(a=1;a<=n;a++){
if(nr[a]==0)
s=s+p;
}
}
if(i%2==0){
for(a=1;a<=n;a=a+2){
if(nr[a]==0)
s=s+p;
}
}
}
}
fprintf(out,"%d\n",s);
fclose(in);
fclose(out);
return 0;
}