社区讨论

90……,第二个点wa,对拍了好久都没错,求神犇纠错

P1072[NOIP 2009 提高组] Hankson 的趣味题参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6gfvlr
此快照首次捕获于
2025/11/20 04:28
4 个月前
此快照最后确认于
2025/11/20 04:28
4 个月前
查看原帖
CPP
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define go(a,b,c) for(int a=b;a>=c;a--)
int read(){
    int a=0,f=0;char c=getchar();
    for(;c<'0'||c>'9';c=getchar())if(c=='-')f=1;
    for(;c>='0'&&c<='9';c=getchar())a=a*10+c-'0';
    return f?-a:a;
}
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a>b?a:b;}
int np=0,p[4649],b[45000],a[2][2];
int main(){
//    freopen("in.txt","r",stdin);
    int pp=floor(sqrt(2000000000));
    fo(i,2,pp)if(!b[i]){p[++np]=i;fo(j,2,pp/i)b[i*j]=1;}//素数表
    for(int n=read(),x=1;n;n--,x=1){
        fo(i,0,1)fo(j,0,1)a[i][j]=read();
        fo(k,1,np){
            int f[2][2]={0};
            fo(i,0,1)fo(j,0,1)while(!(a[i][j]%p[k]))
                a[i][j]/=p[k],f[i][j]++;//指数
            if(f[0][1]>f[1][1])x=0;
            if(f[0][0]!=f[0][1]&&f[0][1]!=f[1][1]&&f[1][0]!=f[1][1])x=0;
            if(f[0][0]==f[0][1]&&f[1][0]==f[1][1])x*=(f[1][0]-f[0][1]+1);
        }
        if(a[0][1]!=a[1][0])x=0;
        if(a[0][0]!=a[0][1]&&a[0][1]!=a[1][0]&&a[1][0]!=a[1][1])x=0;
        if(a[0][0]==a[0][1]&&a[1][0]==a[1][1]&&a[1][0]-1)x<<=1;//余大质数
        printf("%d\n",x);
    }
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...