闻灌多
  • 板块灌水区
  • 楼主xwywxy
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/24 08:33
  • 上次更新2024/7/24 08:43:34
查看原帖
闻灌多
1056648
xwywxy楼主2024/7/24 08:33

dalao求调P1593因子和 RE了一个点

#include<iostream>
//#pragma GCC optimize(2)
using namespace std;
const int N=9901;
const int M=1e7+5;
char buf[M],*p1,*p2;

template<typename T>inline void readT(T &x){
    bool f=1;x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=(f?x:-x);return;
}//快读 

long long ppow(long long a,long long b)//是求a的b次方
{
	long long ans=1,base=a;
	while(b>0)
    {
		if(b&1)
			ans=(ans*base)%N;
        base=(base*base)%N;
		b>>=1;
	}
	return ans;
}//快速幂 

long long o=1,n,m,ans=1,f[M],a[M],u=2,num=0;;

int sum(int p,int k) { // p^0 + p^1 + p^2 + ... + p^k
    if (k==0) return 1;
    if (k&1){
        return(1+ppow(p,(k+1)/2))*sum(p,k/2)%N;
    } else{
        return(ppow(p,k)+sum(p,k-1))%N; 
    }
}//等比数列分治 

int main()
{
    
    readT(n),readT(m);
    while(n!=1)
    {
        if(n%u==0)
        {		    	
		    a[o]=u;
		    f[a[o]]++;
            n/=u;          
        }
        else
        {
		    u++;
			o++;
        }
    }//存储素因数 
    /*for(int i=1;i<=o;i++)
    {
        cout<<f[a[i]]<<endl;
    }*/
    for(int i=1;i<=o;i++)
    {
        num=sum(a[i],f[a[i]]*m)%N;
        //cout<<num<<endl;
        ans=(ans*num)%N;
    }//利用因子和公式 
    //for(int i=1;i<=o;i++)
    //cout<<f[a[o]]/m<<endl;
    printf("%lld",ans);
}
2024/7/24 08:33
加载中...