核心
若n为奇数,一共有偶数项,设p为3,则(1+p)+(p2+p3)=(1+p)+p2(1+p)=(1+p2)(1+p)
1+p+p2+p3+…+pn=(1+p+p2+…+p(n/2))*(1+p(n/2+1));
若n为偶数,一共有奇数项,设p为4,则(1+p)+p2+(p3+p4)=(1+p)+p2+p3(1+p)=(1+p3)(1+p)+P^2
1+p+p2+p3+…+pn=(1+p+p2+…+p(n/2-1))*(1+p(n/2+1))
当然 还有大佬用的 逆元(不会)和变换模值: (A/B)%mod=(A%(modB))/B%mod。对Bmod取余,剩余的值必定是B的倍数,这种方法是用于mod和B小的时候。
本人没有尝试 就不加讨论
int pow(int x,int n)
{
int m=1;
while(n!=0)
{
if(n&1)
{
m=m*x;
}
x=x*x;
n=n/2;
}
return m;
}
int sum(int p,int n)
{
if(p==0)
return 0;
if(n==0)
{
return 1;
}
if(n%2==1)
return (1+pow(p,n/2+1))*sum(p,n/2);
else
return (1+pow(p,n/2+1))*sum(p,n/2-1)+pow(p,n/2);
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",pow(a,b));
printf("%d",sum(a,b));
}