Submission #9539

#TimeUsernameProblemLanguageResultExecution timeMemory
9539coreaXtreme gcd sum (kriii2_X)C++14
1 / 4
4000 ms123560 KiB
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; long long MOD = 1000 * 1000 * 1000 + 7; vector<int> divisor[ 1000003 ]; int N; long long A[ 10003 ]; long long B[ 10003 ]; long long S[ 1000003 ]; void init() { int m = *max_element( B + 1, B + N + 1 ); int s = 0; for( int i = 1; i <= m; i ++ ) { for( int j = i + i; j <= m; j += i ) { divisor[ j ].push_back( i ); s ++; } } } int main() { scanf( "%d", &N ); for( int i = 1; i <= N; i ++ ) { scanf( "%lld %lld", &A[ i ], &B[ i ] ); } init(); long long res = 0; for( long long i = (*max_element(B + 1, B + N + 1)); i >= 1; i -- ) { long long s = 1; for( int j = 1; j <= N; j ++ ) { s *= (B[ j ] / i - (A[ j ] - 1) / i ); s %= MOD; } S[ i ] += s; s %= MOD; S[ i ] += MOD; s %= MOD; for( auto &v : divisor[ i ] ) { S[ v ] -= S[ i ]; S[ v ] %= MOD; S[ v ] += MOD; S[ v ] %= MOD; } // printf( "%d %d\n", i, S[ i ] ); res += (S[ i ] * i); res %= MOD; } printf( "%lld\n", res ); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...