题目
给定两个数 n,k
定义 F(x) 为 i 从 1~x i%k==0 的 i 的和
求出
解题思路
F(x): sum = 0 for i = 1 to x: if i%k == 0: sum += i
即
int F(int x){ sum = 0; for(i=k; i<x; i+=k) sum += i; // 上面的 for 循环是一个等差数列,即 sum = k + 2*k + 3*k + ... }
C++代码
#include<iostream> using namespace std; inline long long f(long long x, long long k){ long long n = x / k; long long sum = (k+n*k)*n/2; return sum; } int main(){ int n, k; cin >> n >> k; long long ans = 0; for(int i=1; i<=n; ++i){ ans += f(i,k); } cout << ans << endl; return 0; }