program main implicit none integer*8::i,j integer*8::N integer*8::a,b,aa,bb integer*8::aaa,bbb integer*8::total=0,total2=0 integer*8,allocatable::list(:),listr(:) read *,N allocate(list(INT(sqrt(real(N))+1)*2)) list=0 do i=1,INT(sqrt(real(N))) if(MOD(N,i).ne.0) cycle a = i b = N/i aa = a+roundup(a)*b bb = a*roundup(b)+b total=total+1 list(total)=aa total=total+1 list(total)=bb ! print *,aa,bb end do allocate(listr(total)) listr = qsortr(list(1:total)) total2 = 1 do i=2,total if(listr(i-1).eq.listr(i))cycle total2=total2+1 end do print '(i0)', total2 contains function roundup(a) result(aa) integer*8::a,aa,tmp aa = 1 tmp = a do aa = aa*10 tmp = tmp/10 if(tmp.eq.0) exit end do end function roundup recursive function qsortr(x) result(y) integer*8,intent(in) ::x(:) integer*8,allocatable::y(:) integer*8::pivot,total total = size(x) if (total <=1) then y = x else pivot = x(total/2) y = [qsortr(pack(x, x .gt. pivot)), & pack(x, x .eq. pivot), & qsortr(pack(x, x .lt. pivot))] endif end function qsortr end program main