/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C C
C COMPUTE DIFFERENCES IN NUMBER OF FRACTIONS C
C 01/02/15 (DKC) C
C C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/
#include <stdio.h>
#include <math.h>
int liouvile(unsigned int a);
double numdiv(unsigned int a, unsigned int flag);
mertens8(unsigned int, unsigned int *count);
//
unsigned int MAXN=10250; // 10250
unsigned int out=24;
// 11, sum of m(x/i)
// 12, sum of n(x/i)
// 13, sum of n(x/i)-m(x/i)
// 14, sum of (n(x/i)-m(x/i))*i
// 17, differences in number of fractions before, after 1/4
// 18, number of fractions before 1/4
// 19, number of fractions after 1/4
// 24, sum of (n(x/i)-m(x/i))*d(i)
// 25, sum of n(x/i)-m(x/i) when i is a perfect square
// 26, sum of (n(x/i)-m(x/i))^2
// 27, sum of (n(x/i)-m(x/i))*log(i)
// 28, sum of sgn(n(x/i)-m(x/i))
// 29, sum of (n(x/i)-m(x/i)*log(i)*d(i)
// 30, sum of (n(x/i)-m(x/i)^2*L(i)^2
// 31, sum of sgn(n(x/i)-m(x/i))*i
// 32, sum of |sgn(n(x/i)-m(x/i))|
//
void main() {
int t,tsum;
unsigned int N,i,temp,count[2];
double sum6,sum7,sum8,sum9,sum10,sum11,sum12,sum13,sum14,sum15,sum16,sum17,sum18;
FILE *Outfp;
Outfp = fopen("out1bd.dat","w");
for (N=2; N<=MAXN; N++) {
printf(" %d \n",N);
if ((out==17)||(out==18)||(out==19))
mertens8(N, count);
if (out==17) {
fprintf(Outfp," %d\n",(int)count[0]-(int)count[1]);
continue;
}
if (out==18) {
fprintf(Outfp," %d\n",count[0]);
continue;
}
if (out==19) {
fprintf(Outfp," %d\n",count[1]);
continue;
}
if ((out==11)||(out==12)) {
sum6=0.0;
sum7=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum6=sum6+(double)count[0];
sum7=sum7+(double)count[1];
}
if (out==11)
fprintf(Outfp," %e\n",sum6);
if (out==12)
fprintf(Outfp," %e\n",sum7);
continue;
}
if ((out==13)||(out==14)) {
sum8=0.0;
sum9=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum8=sum8+(double)count[1]-(double)count[0]; // h(x)
sum9=sum9+(double)i*((double)count[1]-(double)count[0]);
}
if (out==13)
fprintf(Outfp," %e\n",sum8);
if (out==14)
fprintf(Outfp," %e\n",sum9);
continue;
}
if (out==24) {
sum14=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum14=sum14+((double)count[1]-(double)count[0])*numdiv(i,1);
}
fprintf(Outfp," %e\n",sum14);
continue;
}
if (out==25) {
sum13=0.0;
for (i=1; i<=N; i++) {
temp=(unsigned int)(sqrt((double)i)+0.001);
if ((temp*temp)==i) {
mertens8(N/i, count);
sum13=sum13+(double)count[1]-(double)count[0];
}
}
fprintf(Outfp," %e\n",sum13);
continue;
}
if (out==26) {
sum10=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum10=sum10+((double)count[1]-(double)count[0])*((double)count[1]-(double)count[0]);
}
fprintf(Outfp," %e\n",sum10);
continue;
}
if (out==27) {
sum11=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum11=sum11+((double)count[1]-(double)count[0])*log((double)i);
}
fprintf(Outfp," %e\n",sum11);
continue;
}
if (out==28) {
sum12=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
if (count[0]>count[1]) // sum of sgn(n(x/i)-m(x/i))
sum12=sum12-1.0;
if (count[0]<count[1])
sum12=sum12+1.0;
}
fprintf(Outfp," %e\n",sum12);
continue;
}
if (out==29) {
sum18=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
sum18=sum18+((double)count[1]-(double)count[0])*log((double)i)*numdiv(i,1);
}
fprintf(Outfp," %e\n",sum18);
continue;
}
if (out==30) {
sum17=0.0;
tsum=0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
t=liouvile(i);
tsum=tsum+t;
sum17=sum17+((double)count[1]-(double)count[0])*((double)count[1]-(double)count[0])*(double)tsum*(double)tsum;
}
fprintf(Outfp," %e\n",sum17);
continue;
}
if (out==31) {
sum15=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
if (count[0]>count[1]) // sum of sgn(n(x/i)-m(x/i))*i
sum15=sum15-(double)i;
if (count[0]<count[1])
sum15=sum15+(double)i;
}
fprintf(Outfp," %e\n",sum15);
continue;
}
if (out==32) {
sum16=0.0;
for (i=1; i<=N; i++) {
mertens8(N/i, count);
if (count[0]!=count[1]) // sum of |sgn(n(x/i)-m(x/i))|
sum16=sum16+1.0;
}
fprintf(Outfp," %e\n",sum16);
}
}
fclose(Outfp);
return;
}