题意:本题其实就是要求6的n/2次方,n如果是个奇数再乘以4,仔细分析分析就可以得出。
题目
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
char ch[1000000];
ll flag;
void chu() //模拟大数除法
{
char c=ch[strlen(ch)-1];
ll t=c-'0';
if(t%2==0)flag=0;
else flag=1; //这里判断最后一位是奇数还是偶数,是奇数就要再最后再×4
ll ans=0;
ll len=strlen(ch);
for(ll i=0; i<len; i++) //模拟大数除法
{
ll t=ch[i]-'0'+ans*10; //ans代表是否给后面那一位剩过去一个1
ans=0;
if(t%2==0&&t!=0)
{
t=t/2;
ch[i]=t+'0';
}
else if(t==0)
{
continue;
}
else if(t%2!=0)
{
t=t/2;
ch[i]=t+'0';
ans++;
}
}
}
ll kuai(ll a,ll b){ //快速幂模板
ll ans=1;
while(b){
if(b&1)ans=ans*a%mod;
b=b>>1;
a=a*a%mod;
}
return ans;
}
ll kuai_father(ll a){
ll ans=1;
int len=strlen(ch);
for(int i=len-1;i>=0;i--){
int t=ch[i]-'0';
ans=ans*kuai(a,t)%mod;//再把a求次方,然后和ans*起来,代表指数的相加
a=kuai(a,10)%mod;//先算出每一位儿的a的10次方,然后再求这个数的t次方
} //这里第一为是10的零次方,所以这里求次方放到下面,代表求下一个t的次方,
return ans;//每进一位,求个10次方
}
void solve()
{
scanf("%s",ch);
chu(); //先用大数除法除个2,因为取模和除法不能同时在过程中出现,不然会出问题
ll sum=1;
sum=kuai_father(6);//次方很大求法,把次方分解成一位一位的,当然对应的要把每一位的次方×给他
if(flag==1)sum=sum*4%mod;
printf("%lld\n",sum);
}
int main()
{
solve();
return 0;
}