WangHuiKai2 @ 2024-10-04 17:06:16
#include<bits/stdc++.h>
using namespace std;
int a,b,z[100],m=0,zz[100];
long long ans=1,ans1=1,ans2=0;
bool v[50000010];
int s[600010], cnt = 0;
void w(int n){
v[1]=1;
for(int i=2;i<=n;i++){
if(v[i]==0){
s[++cnt]=i;
}
for(int j=1;j<=cnt&&s[j]*i<=n;j++){
v[i*s[j]]=1;
if(i%s[j]==0){
break;
}
}
}
}int main(){
cin>>a>>b;
if(v[a]==1){
for(int i=0;i<=b;i++){
ans2=ans2+pow(a,i);
ans2%=9901;
}
cout<<ans2%9901;
return 0;
}
for(int i=2;i<=a;i++){
while(a%i==0&&v[i]==1){
z[i]++;
zz[++m]=i;
a/=i;
}
}
for(int i=1;i<=m;i++){
cout<<z[i]<<' ';
}
for(int i=1;i<=m;i++){
if(z[zz[i]]>1){
for(int j=1;j<=z[zz[i]]*b;j++){
while(j>0){
if(j%2!=0){
ans1=ans1*zz[i]%9901;
}
zz[i]=zz[i]*zz[i]%9901;
j=j>>1;
}
}
}
if(z[zz[i]]==1) {
for(int j=1;j<=b;j++){
while(j>0){
if(j%2!=0){
ans1=ans1*zz[i]%9901;
}
zz[i]=zz[i]*zz[i]%9901;
j=j>>1;
}
}
}
ans*=ans1;
ans%=9901;
}
cout<<ans;
return 0;
}
输出一直不对,前面是欧拉筛,后面是快速幂和约数和公式,求dalao救命
by Tmbcan @ 2024-10-04 17:54:28
关于素数筛:
你代码里的做法跟我说的本质上是一样的,筛一遍素数还会多一个常数(并且你并没有调用素数筛,)
对于约数和公式:
观察注意到:你的约数和公式部分可能出现了问题