找规律:
以6为例:
约数有1的数有6个 1 , 2 , 3 , 4 , 5 , 6
约数有2的数有3个 2,4,6
约数有3的数有2个 3,6
约数有4的数有0个
约数有5的数有0个
约数有6的数有1个 6
所以:
约数有x的数有n除以x个
即:
fn=n/1+n/2+n/3.....+n/n
代码如下
#include<iostream>
#include<cstdio>
#include<cctype>
using namespace std;
#define in = read()
typedef long long ll;
typedef unsigned int ui;
int n;
int ans;
inline ll read(){
ll num = 0 , f = 1; char ch = getchar();
while(!isdigit(ch)){
if(ch == '-') f = -1;
ch = getchar();
}
while(isdigit(ch)){
num = num*10 + ch - '0';
ch = getchar();
}
return num*f;
}
int main(){
n in;
for(register int i=1;i<=n;i++)
ans += n/i;
printf("%d" , ans);
}
//COYG