For an integer n, define f(n) to be the sum of its proper divisors (the divisors excluding the number itself), f is called the restricted divisor function.
Given an integer m. Find how many integers n between 1 and 1000000 (inclusively) has f(n)<=m.
Input
The input contains several cases, each has a single integer m on a seperate line. All input data fit in a signed 32-bit integer.
Output
The answer for each case should be printed on a seperate line.
Sample Input
1
3392927
3392928
Sample Output
78499
999999
1000000
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stdlib.h>
#include <queue>
#include <cstdio>
#include <set>
#include <map>
#include <string.h>
#include <string>
using namespace std;
#define MAX 1000000
int ans[MAX+5];
void init()
{
ans[1] = 0;
memset(ans,0,sizeof(ans));
for(int i = 1 ; i<= MAX/2; i++)
for(int j = 2 ; i*j <= MAX ;j++)
{
ans[i*j] += i;
}
sort(ans,ans+MAX+1);
}
int main()
{
init();
int n;
while(scanf("%d",&n) != EOF)
{
if(n >= 3392928)
{
printf("1000000\n");
continue;
}
for(int i = 1 ; i<= MAX; i++)
{
if(ans[i] > n)
{
printf("%d\n",i-1);
break;
}
}
}
return 0;
}