/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C COMPUTE NUMBER OF DIVISORS (assumes N is divisible by 360) C C 10/16/15 (DKC) (starts after N=2520=360*7) C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ #include <stdio.h> #include <math.h> #include "table2.h" // unsigned int MAXN=2000000000; // maximum N (to be multiplied by 360) unsigned int BEGINN=7; // beginning N (to be multiplied by 360) // void main() { unsigned int N,h,i,p,count,maxcnt,t,total,flag2,flag3,flag5; FILE *Outfp; Outfp = fopen("out1ac.dat","w"); // // compute convolutions // maxcnt=48; for (N=BEGINN; N<=MAXN; N++) { t=N; flag2=4; flag3=3; flag5=2; count=0; while ((t&1)==0) { count=count+1; t=t>>1; } flag2=flag2+count; count=0; while (t==(t/3)*3) { count=count+1; t=t/3; } flag3=flag3+count; count=0; while (t==(t/5)*5) { count=count+1; t=t/5; } flag5=flag5+count; total=flag2*flag3*flag5; // printf(" N=%d t=%d %d %d %d \n",N,total,flag2,flag3,flag5); if (t==1) goto askip; h=(unsigned int)(sqrt((double)t)*19.0); for (i=3; i<17983; i++) { p=table[i]; if (p>h) goto askip; count=0; while (t==(t/p)*p) { t=t/p; count=count+1; } total=total*(count+1); } printf("error \n"); goto zskip; askip: if (total>maxcnt) { maxcnt=total; printf(" %d %d \n",N,total); fprintf(Outfp," %d, %d, \n",N,total); } } zskip: fclose(Outfp); return; }