解题思路:把4个数都变成:质因数1^x1*质因数2^x2*质因数3^x3...然后进行讨论即可,对于同一个底数,假设4个数对应的指数(可以为0)分别为a,b,c,d。令x的指 数为e
令ret=1
那么当b>d时,显然不成立,因为b<=e<=d,返回0
当b=d时,e只能取b,ret*=1;
当b<d时:当a!=b&&c!=d时,e既要取b又要取d,不成立,返回0
当a!=b||c!=d时(由于上一个的限制,到这里时显然或运算两边不同时成立),e取b或d,ret*=1
当a==b&&c==d时,e在b和d间随便取,ret*=d-b+1
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 2010
typedef long long ll;
int n;
ll a0[maxn],a1[maxn],b0[maxn],b1[maxn];
int ans[maxn];
unordered_map<ll,int> ys[5];//key是a0(或a1,b0,b1)的质因数,val是a0(或a1,b0,b1)的对应质因数的指数
//a0,a1,b0,b1分别对应ys[1],ys[2],ys[3],ys[4]
vector<ll> primefactor;//所有出现过的质因数,1不是质因数,没有任何影响
void fenjie(ll x,int index){//分解质因数
int tmp;
for(ll i=2;i<=x/i;i++){
if(x%i==0){
tmp=0;
while(x%i==0){
x/=i;
tmp++;
}
ys[index][i]=tmp;
if(find(primefactor.begin(),primefactor.end(),i)==primefactor.end()){
primefactor.push_back(i);
}
}
}
if(x>1){
ys[index][x]=1;
if(find(primefactor.begin(),primefactor.end(),x)==primefactor.end()){
primefactor.push_back(x);
}
}
}
int getans(ll a0,ll a1,ll b0,ll b1){
ys[1].clear();ys[2].clear();ys[3].clear();ys[4].clear();primefactor.clear();
fenjie(a0,1);
fenjie(a1,2);
fenjie(b0,3);
fenjie(b1,4);
for(auto v:primefactor){
for(int i=1;i<=4;i++){
if(ys[i].find(v)==ys[i].end()){
ys[i][v]=0;//0次方
}
}
}
ll ret=1;
for(auto v:primefactor){
if(ys[2][v]>ys[4][v])return 0;
else if(ys[2][v]==ys[4][v])continue;
else{//ys[2][v]<ys[4][v]
if(ys[1][v]>ys[2][v]&&ys[3][v]<ys[4][v])return 0;
else if(ys[1][v]>ys[2][v]||ys[3][v]<ys[4][v])continue;//由于上一个else if的限制,或两边不会同时成立
else ret*=ys[4][v]-ys[2][v]+1;//此时为ys[1][v]==ys[2][v]&&ys[3][v]==ys[4][v]
}
}
return ret;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld%lld%lld%lld",&a0[i],&a1[i],&b0[i],&b1[i]);
}
for(int i=1;i<=n;i++){
ans[i]=getans(a0[i],a1[i],b0[i],b1[i]);
printf("%lld\n",ans[i]);
}
system("pause");
return 0;
}
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:875 |
数列 (C++代码)浏览:707 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:502 |
不容易系列 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:287 |
【亲和数】 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1052 |
printf基础练习2 (有点不明白)浏览:887 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1186 |
A+B for Input-Output Practice (III) (C语言代码)浏览:594 |