Submission #9709

# Submission time Handle Problem Language Result Execution time Memory
9709 2014-09-28T08:17:10 Z myungwoo Xtreme gcd sum (kriii2_X) C++14
4 / 4
2396 ms 177000 KB
#include<stdio.h>
#include<memory.h>
#define min2(a,b) ((a)>(b)?(b):(a))
#define mod 1000000007
#define MX 21000000
using namespace std;

typedef long long lld;

int n, se[11111][2], gap[11111];
int phi[1000002], top[1000002], inv[1000002], cnt, mx, gop=1, zcn, dap;
int ix[MX], pv[MX];

void make(int it){
	int i, j, a;
	for(i=1; i*i<=se[it][1]; i++)ix[cnt]=it, pv[cnt]=top[i], top[i]=cnt++;
	j=se[it][0]/i, i=se[it][1]/i;
	for(; i>=1;){ // 몫 = 3
		if(j==0){
			a=se[it][1]/i;
			ix[cnt]=it, pv[cnt]=top[a];
			i--;
		}
		else{
			a=min2(se[it][0]/j, se[it][1]/i);
			ix[cnt]=it, pv[cnt]=top[a];
			if(se[it][0]/j == se[it][1]/i)i--, j--;
			else if(se[it][0]/j > se[it][1]/i)i--;
			else j--;
		}
		top[a]=cnt++;
	}
}

int pow(int a, int b){
    int v = a, ret = 1;
    for (;b;b>>=1,v=(lld)v*v%mod) if(b&1) ret=(lld)ret*v%mod;
    return ret;
}

int main(){
	int i, j, p, q;
	scanf("%d", &n), zcn=n;
	memset(top, -1, sizeof(top));
	for(i=0; i<n; i++){
		scanf("%d%d", &se[i][0], &se[i][1]), se[i][0]--;
		make(i);
		if(se[i][1]>mx)mx=se[i][1];
	}
	phi[1]=1;
	for(i=2; i<=mx; i++){
		if(phi[i]==0){
			phi[i]=i-1;
			if(i>1000)continue;
			for(j=i*i; j<=mx; j+=i)phi[j]=i;
		}
		else{
			p=phi[i];
			if(i%(p*p)==0)phi[i]=p*phi[i/p];
			else phi[i]=(p-1)*phi[i/p];
		}
	}
	for(i=1; i<=mx; i++)inv[i]=pow(i,mod-2);
	for(i=mx; i>=1; i--){
		for(j=top[i]; j>=0; j=pv[j]){
			p=ix[j], q=se[p][1]/i-se[p][0]/i;
			if(gap[p]==0)zcn--;
			else gop=((lld)gop*inv[gap[p]])%mod;
			gap[p]=q;
			if(q==0)zcn++;
			else gop=((lld)gop*q)%mod;
		}
		if(zcn==0){
			dap+=(lld)gop*phi[i]%mod;
			if(dap>=mod)dap-=mod;
		}
	}
	printf("%d", dap);
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 177000 KB Output is correct
2 Correct 0 ms 177000 KB Output is correct
3 Correct 0 ms 177000 KB Output is correct
4 Correct 0 ms 177000 KB Output is correct
5 Correct 0 ms 177000 KB Output is correct
6 Correct 0 ms 177000 KB Output is correct
7 Correct 0 ms 177000 KB Output is correct
8 Correct 0 ms 177000 KB Output is correct
9 Correct 0 ms 177000 KB Output is correct
10 Correct 0 ms 177000 KB Output is correct
11 Correct 256 ms 177000 KB Output is correct
12 Correct 256 ms 177000 KB Output is correct
13 Correct 260 ms 177000 KB Output is correct
14 Correct 248 ms 177000 KB Output is correct
15 Correct 248 ms 177000 KB Output is correct
16 Correct 28 ms 177000 KB Output is correct
17 Correct 212 ms 177000 KB Output is correct
18 Correct 232 ms 177000 KB Output is correct
19 Correct 76 ms 177000 KB Output is correct
20 Correct 128 ms 177000 KB Output is correct
21 Correct 260 ms 177000 KB Output is correct
22 Correct 256 ms 177000 KB Output is correct
23 Correct 264 ms 177000 KB Output is correct
24 Correct 252 ms 177000 KB Output is correct
25 Correct 256 ms 177000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 177000 KB Output is correct
2 Correct 0 ms 177000 KB Output is correct
3 Correct 0 ms 177000 KB Output is correct
4 Correct 0 ms 177000 KB Output is correct
5 Correct 0 ms 177000 KB Output is correct
6 Correct 0 ms 177000 KB Output is correct
7 Correct 0 ms 177000 KB Output is correct
8 Correct 0 ms 177000 KB Output is correct
9 Correct 0 ms 177000 KB Output is correct
10 Correct 0 ms 177000 KB Output is correct
11 Correct 400 ms 177000 KB Output is correct
12 Correct 400 ms 177000 KB Output is correct
13 Correct 388 ms 177000 KB Output is correct
14 Correct 388 ms 177000 KB Output is correct
15 Correct 396 ms 177000 KB Output is correct
16 Correct 184 ms 177000 KB Output is correct
17 Correct 240 ms 177000 KB Output is correct
18 Correct 1184 ms 177000 KB Output is correct
19 Correct 1264 ms 177000 KB Output is correct
20 Correct 736 ms 177000 KB Output is correct
21 Correct 660 ms 177000 KB Output is correct
22 Correct 2308 ms 177000 KB Output is correct
23 Correct 2396 ms 177000 KB Output is correct
24 Correct 1844 ms 177000 KB Output is correct
25 Correct 1864 ms 177000 KB Output is correct