Problem:
Score : 300 points

Problem Statement

Given is a positive integer N.
How many tuples (A,B,C) of positive integers satisfy A \times B + C = N?

Constraints

2 \leq N \leq 10^6

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

3

Sample Output 1

3

There are 3 tuples of integers that satisfy A \times B + C = 3: (A, B, C) = (1, 1, 2), (1, 2, 1), (2, 1, 1).

Sample Input 2

100

Sample Output 2

473

Sample Input 3

1000000

Sample Output 3

13969985

Solution in C (Clang 10.0.0) (judge verdict: Accepted)

#include <stdio.h>
#include <math.h>


int main(void){
    int N;
    scanf("%d", &N);

    int i,j;

    int ans=0;

    // c  i
    for(i=1;i<N;i++){
        //N-iの約数の数
        //N-iを素因数分解
        /*
        int t = N-i;
        int prime[100000][2] ={0};
        j=0;
        while(t>1){
            if(j > sqrt(t)) break;
            if((t%j) == 0){
                for(int k=0;k<100000;k++){
                    if(prime[k][0] == j){
                        prime[k][1]++;
                    }
                    if(!(prime[k][0])){
                        prime[k][0] = j;
                        prime[k][1]++;
                    }
                }
                t = t/j;
            }
            j++;
        }
        j=0;
        int T=1;
        while( prime[j][0] ){
            T = T * (prime[j][1]+1);
            j++;
        } 
        ans = ans + T;
        */
       int T =  sqrt(N-i);
        for(j=1; j<=T; j++){
            //printf("i:%d, j:%d, ans:%d",i,j,ans);
            if( ((N-i) % j) ==0){
                if( j == ((N-i)/j) ){
                    ans++;
                    continue;
                }
                ans = ans+2;
            }
        }
        //printf("i = %d", i);
    }    
    printf("%d", ans);
    return 0;
}