记录编号 |
276186 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2009]Hankson的趣味题 |
最终得分 |
100 |
用户昵称 |
Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.064 s |
提交时间 |
2016-07-03 17:10:09 |
内存使用 |
0.35 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1010;
struct Node{
int data,num;
int p[maxn],w[maxn];
}a0,a1,b0,b1;
int ans=1,p=0,l[maxn],r[maxn];
void Init();
void Judge();
int main(){
freopen("son.in","r",stdin);
freopen("son.out","w",stdout);
int t;scanf("%d",&t);
while(t--){
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
p=0;ans=1;
scanf("%d%d%d%d",&a0.data,&a1.data,&b0.data,&b1.data);
Init();
Judge();
for(int i=1;i<=b1.num;i++) ans*=(r[i]-l[i]+1);
if(p) ans=0;
printf("%d\n",ans);
}
return 0;
}
void Init(){
int x=2;
b1.num=0;
while(b1.data>=x*x){//分解b1质因数
int cnt=0;
while(b1.data%x==0){ cnt++; b1.data/=x; }
if(cnt){ b1.p[++b1.num]=x; b1.w[b1.num]=cnt; }
x++;
}
if(b1.data!=1){ b1.p[++b1.num]=b1.data; b1.w[b1.num]=1; }
a0.num=0;
for(int i=1;i<=b1.num;i++){//分解a0
int x=b1.p[i],cnt=0;
while(a0.data%x==0){ cnt++; a0.data/=x; }
a0.p[++a0.num]=x; a0.w[a0.num]=cnt;
}
a1.num=0;
for(int i=1;i<=b1.num;i++){//分解a1
int x=b1.p[i],cnt=0;
while(a1.data%x==0){ cnt++; a1.data/=x; }
a1.p[++a1.num]=x; a1.w[a1.num]=cnt;
}
b0.num=0;
for(int i=1;i<=b1.num;i++){//分解b0
int x=b1.p[i],cnt=0;
while(b0.data%x==0){ cnt++; b0.data/=x; }
b0.p[++b0.num]=x; b0.w[b0.num]=cnt;
}
}
void Judge(){
for(int i=1;i<=b1.num;i++){
if(a1.w[i]>b1.w[i]){ p=1; break;}
if(a1.w[i]<a0.w[i]&&b1.w[i]>b0.w[i]&&b1.w[i]>a1.w[i]){ p=1;break; }
if(a1.w[i]<a0.w[i]){ l[i]=r[i]=a1.w[i]; continue; }
if(b1.w[i]>b0.w[i]){ l[i]=r[i]=b1.w[i]; continue; }
l[i]=a1.w[i]; r[i]=b1.w[i];
}
}