1. 程式人生 > >Hankson的趣味題

Hankson的趣味題

freopen span pan ont ace mes IT space col

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

typedef long long ll;

const ll maxn=20000+10;
ll ma,mb,mc,md,mx,a,b,c,d,x;
ll prime[maxn],cnt[maxn];
ll top;
bool p[4000000+10];

ll getnum(ll gc,ll t){
    ll num=0;
    while(t%gc==0){
        num++;
        t/=gc;
    }
    
return num; } ll check(ll gc){ ma=getnum(gc,a); mb=getnum(gc,b); mc=getnum(gc,c); md=getnum(gc,d); ll num=0; if(ma>mc&&mb<md&&mc==md) num++; if(ma>mc&&mb==md&&mc<=md) num++; if(ma==mc&&mb<md&&mc<=md) num++;
if(ma==mc&&mb==md&&mc<=md) num+=(md-mc+1); return num; } int main(){ //freopen("vvv.out","w",stdout); ll n; for (ll i=2;i<=2000000;i++){ if(p[i]) continue; for(ll j=i;j<=2000000/i;j++){ p[i*j]=true; } } ll m=0; for (ll i=2;i<=2000000
;i++) if(!p[i]) prime[++m]=i; scanf("%lld",&n); while(n--){ top=0; ll ans=1; memset(cnt,1,sizeof(cnt)); scanf("%lld%lld%lld%lld",&a,&c,&b,&d); if (a%c||d%b) {printf("0\n");continue;} for (ll i=1;prime[i]<=d;i++){ if(d%prime[i]==0){ cnt[++top]=check(prime[i]);//prllf("%d\n",cnt[top]); } } for (ll i=1;i<=top;i++){ ans*=cnt[i]; } //if(ans==1) printf("%d\n",0); printf("%lld\n",ans); } return 0; }

Hankson的趣味題