#14蒟蒻求助

P1593 因子和

Twjx @ 2020-08-25 11:34:16

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int a=1,b=0;
    char ch=getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    while('0'<=ch&&ch<='9') b=b*10+ch-'0',ch=getchar();
    return b;
}
const int p=9901;
int s[65],cnt,ss[65],ct,ans=1;
int qpow(int a,int b){
    int anss=1;
    while(b){
        if(b&1) anss=anss*a%p;
        a=a*a%p;
        b>>=1;
    }
    return anss%p;
}
int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1;y=0;return a;
    }
    int r=exgcd(b,a%b,x,y);
    int tem=x;
    x=y;
    y=tem-a/b*y;
    return r;//
}
int niyuan_tongyu(int a){
    int x,y;
    int d=exgcd(a,p,x,y);
    //if(d!=1) return -1;//无解
    return (x%p+p)%p;
}
int calc(int a,int b){
    if(a%p==1) return b+1;
    else {
        //printf("%lld\n",pow(a,b+1)-1);
        return ((qpow(a,b+1)-1)%p*niyuan_tongyu(a-1)%p)%p;
    }
}
signed main()
{
    int a,b,k=1;
    a=read();b=read();
    //if(a==0) {cout<<0<<endl;return 0;}//特判 
    //if(b==0||a==1) {cout<<1<<endl;return 0;}
    for(int i=2;i<=a-1;i++){
        if(a/i==a*1.0/i) {s[++cnt]=i,ss[cnt]=1;
        k=a/i;
        while(k){
        if(k/i==k*1.0/i) ss[cnt]++,k/=i;
        else break;}
        a=k;
        }
    }
    if(a!=1) {s[++cnt]=a;ss[cnt]=1;}
    //printf("%lld %lld\n",s[i],ss[i]);
    for(int i=1;i<=cnt;i++){
        ss[i]*=b;
    }
    for(int i=1;i<=cnt;i++){
        ans=(ans%p*calc(s[i],ss[i])%p)%p;
    }
    printf("%lld",ans%p);
    return 0;
}

by Mars_Dingdang @ 2020-08-25 11:56:15

写清宾语(求助啥


by Twjx @ 2020-08-25 16:55:49

第14个点过不了,麻烦各位dalao看一下哪里有漏洞


by 一珂松果 @ 2020-10-25 11:11:53

我一开始第14个点也过不了,输出ans的时候加上(ans%p+p)%p就过了,你可以试一下


by Twjx @ 2020-11-07 08:59:38

@一珂松果 感谢,已解决


by hy1089knigh @ 2021-02-04 09:56:18

@一珂松果 为什么这样做就对了?直接输出ans不行?


by lwhqwer012 @ 2021-11-23 17:01:04

@hy1089knigh 因为 对p的n次方模完减去1之后 这个数有可能是负数 所以如果前面的p^n-1没有进行负数的取模的话 最后就需要(ans%mod+mod)%mod 可是试试这组输入 9901 2


by hy1089knigh @ 2021-11-25 22:52:09

@lwhqwer012 明白了,这样做就能让结果在mod以内且是正数


by florence25 @ 2023-04-14 18:18:26

@lwhqwer012 感谢


by Zq5437 @ 2023-08-16 20:52:23

@lwhqwer012 Or2,感谢


|