下のリンクに昨日(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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。