1. 程式人生 > >有史以來最毒瘤的一次之Hankson的趣味題。。。

有史以來最毒瘤的一次之Hankson的趣味題。。。

我先寫一篇部落格發表一下我的情感
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
一道數論題,我寫了整整四天,刷了整整四頁半提交記錄,還把正確率刷到了30%。。。
可惡啊,然而。。。
進階指南確定沒有問題嗎。。。
其實我至今不知道它怎麼寫,只不過是把別人的程式碼用自己的語言搬過來而已。。。
不行這一題我一定得點差評。。。
而且最牛逼的是除了60分之外,我刷了0分。10分。20分。30分。40分。50分。70分。80分。90分。100分。。。
這是我血的程式碼:

#include<bits/stdc++.h>
using namespace std;
int n,m,a0,a1,b0,b1,ans,temp,isprime[10010
],v[500010]; bool flag; inline int read() { int num=0,flag=1; char c=getchar(); for (;c<'0'||c>'9';c=getchar()) if (c=='-') flag=-1; for (;c>='0'&&c<='9';c=getchar()) num=(num<<3)+(num<<1)+c-48; return num*flag; } void getprime() { for (int i=2
;i<=m;++i) { if (!v[i]) { v[i]=i; isprime[++temp]=i; } for (int j=0;j<=temp;++j) { if (isprime[j]>v[i]||isprime[j]>m/i) break; v[i*isprime[j]]=isprime[j]; } } } void cnt(int t) { int
ma=0,mb=0,mc=0,md=0,mx=0; while (a0%t==0) { ma++; a0/=t; } while (b0%t==0) { mb++; b0/=t; } while (a1%t==0) { mc++; a1/=t; } while (b1%t==0) { md++; b1/=t; } if (ma==mc&&mb==md&&mc<=md) mx=md-mc+1; if (ma>mc&&mb<md&&mc==md) mx=1; if (ma>mc&&mb==md&&mc<=md) mx=1; if (ma==mc&&mb<md&&md>=mc) mx=1; ans*=mx; if (ans==0) flag=false; } int main() { n=read(); m=sqrt(2000000000); getprime(); for (int i=1;i<=n;++i) { flag=true; a0=read(); a1=read(); b0=read(); b1=read(); ans=1; for (int j=1;j<=temp;++j) { if (isprime[j]<=b1) cnt(isprime[j]); if (flag==false) break; } if (a0>1) cnt(a0); else if (b1>1&&b1!=a0) cnt(b1); printf("%lld\n",ans); } return 0; }

0.0根本不知道怎麼做GG