[Nowcoder218397]小さいGのGCD /小さいGのシグマ

スモールGのGCD /スモールGのシグマ

タイトルリンク:nowcoder 218397

Niu Keへ:

->クリックしてジャンプ<->

一般的なアイデア

数kが与えられた場合、F(x)をj = 1〜xでjをkで割った合計として定義します。
次に、i = 1〜nの各F(i)値の合計を見つけるように求められます。

アイデア

この質問は明らかにFFを見ていますF関数には、接頭辞と合計の意味があります。

それがkkであるかどうかにかかわらず、あなたはそれぞれの新しい番号をもう一度見るだけですkが割り切れる場合、これに対する答えは最後に新しく追加された数を加えたものになります。それ以外の場合、答えは最後のものと同じです。

次に列挙すると、各F(i)F(i)を見つけることができますF i 、合計も非常に単純です。

コード

#include<cstdio>
#define ll long long

using namespace std;

int n, k;
ll ans, now;

int main() {
    
    
	scanf("%d %d", &n, &k);
	
	for (int i = 1; i <= n; i++) {
    
    
		if (i % k == 0) now += 1ll * i;
		ans += now;
	}
	
	printf("%lld", ans);
	
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_43346722/article/details/114552306