質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

309閲覧

atcoder 11/23 c問題に関して

tokutok

総合スコア17

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/11/24 06:02

編集2018/11/24 08:38

下のリンクに昨日(11/23)のatcoderの問題があります。
atcoder 2018.11/23 c
下のコードで下から7行目+limitが必要な理由を教えてください。

c++

1#include<iostream> 2#include<cmath> 3#define N 100001 4#define limit 1000000007 5using namespace std; 6int powerTen(int x) { 7 int tmp = 1; 8 for (int i = 1; i <= 10; i++) { 9 tmp = (long long)tmp * x % limit; 10 /*最終的にはlimitで割るからint型でいいが途中long longが必要 11 limit 10^9ほど int_max 2*10^9ほど*/ 12 } 13 return tmp; 14} 15int main() { 16 int n; cin >> n; 17 int ans = 0; 18 int a[N]; a[1] = 1; 19 for (int i = 2; i <= n; i++) { 20 a[i] = powerTen(i); 21 } 22 for (int i = 1; i <= n; i++) { 23 int p = a[i] - a[i - 1] + limit; // i 24 int q = a[n/i]; // <= n/i 25 ans = (ans + (long long)p * q) % limit; 26 } 27 cout << ans << endl; 28 return 0; 29} 30 31 32

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

必要な理由だけ答えると問題文

組合せの個数を 1 000 000 007 で割った余りを出力しなさい.

を読め
って事になります。

なぜ、この位置で余りを計算していいのかについては
「1000000007」でググるとまぁいろいろ出てきます。

雑に言うと数の性質です


追記

編集をうけて、a[i]よりa[i-1]が大きい場合にpが負になるのを防止するため

投稿2018/11/24 06:59

編集2018/11/24 08:52
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問