比赛 至少完成十道练习 评测结果 AAAAAAAAAA
题目名称 Hankson的趣味题 最终得分 100
用户昵称 Ostmbh 运行时间 0.058 s
代码语言 C++ 内存使用 0.79 MiB
提交时间 2017-05-20 21:42:28
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int prime[100010];
int a1,a0,b0,b1;
int sum,high,low,inda1,inda0,indb1,indb0;
bool l[100010]={0};
int cntprime=0;
inline void getprime(){
	int q=(int)sqrt(double(100000));
	for(int i=2;i<=100000;i++)
		if(!l[i]){
			prime[cntprime++]=i;
			if(i<=q)
				for(int j=i*i;j<=100000;j+=i)
					l[j]=1;
		}
}
inline int getind(int &x,int p){
	int sum=0;
	while(x%p==0){
		x/=p,sum++;
	}
	return sum;
}
inline void work(int pi){
	inda0=getind(a0,pi),inda1=getind(a1,pi);
	indb0=getind(b0,pi),indb1=getind(b1,pi);
	low=inda1;
	if(indb0<indb1) 
		low=indb1;
	high=indb1;
	if(inda0>inda1) 
		high=inda1;
	if(high>=low) 
		sum*=(high-low+1);
	else sum=0;
}
inline void solve(){
	scanf("%d %d %d %d",&a0,&a1,&b0,&b1);
	sum=1;low=high=0;
	for(int i=0;prime[i]*prime[i]<=b1&&prime[i]!=0;i++){
		work(prime[i]);
	}
	if(b1>1) 
		work(b1);
	printf("%d\n",sum);
}
int main(){
	freopen("son.in","r",stdin);
	freopen("son.out","w",stdout);
	int n;
	getprime();
	scanf("%d",&n);
	while(n--){
		solve();
	}
return 0;
}