GOD_H_J 2022-11-04 17:18 采纳率: 0%
浏览 14

求1助a的b次方10个字符

题目

已 知 两 个 正 整 数 n , p;
np 次 方。
n <=1,000,000,000 ; p <=20,000)

93分 WATLE

code

#include<bits/stdc++.h>//TLE 高 精 压 位 快 速 幂
using namespace std;
#define int long long
const int N=1e8,Q=8;
static int st[35], top;
int n,p;
struct node{
    int a[66699]={0},l=1;
    void init(int y){a[0]=y;l=1;}
    inline void Put (int num, bool x) {
        top = 0;
        while (num) st[++top] = num % 10, num /= 10;
        if(x) for (int i = 1; i <= 8 - top; ++ i) putchar ('0');
        while (top) putchar (st[top] + '0'), --top;
        return;
    }
    void print(){
        Put(a[l-1], 0);
        for(int i=l-2;i>=0;--i)
            Put(a[i], 1);
        return;
    }
    node operator * (node x) const{
        node t=*this,id;
        id.l=t.l+x.l-1;
        for(int i=0;i<t.l;++i){
            for(int j=0;j<x.l;++j){
                id.a[i+j]+=t.a[i]*x.a[j];
                if(id.a[i+j]>=N){
                    id.a[i+j+1]+=id.a[i+j]/N;
                    id.a[i+j]%=N;
                }
            }
        }
        while(id.a[id.l]){
            id.a[id.l+1]+=id.a[id.l]/N;
            id.a[id.l++]%=N;
        }
        return id;
    }
}q1,p1;
inline void power(int r,int t){
    q1.init(1);p1.init(r);
    while(t){
        if(t&1) q1=q1*p1;
        p1=p1*p1;
        t>>=1;
    }
    return ;
}
static inline void write(__int128 x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
static inline __int128 po(int a, int b){
    __int128 res = 1;
    while (b){
        for (int i = 1; i <= b % 10; i++)
            res = (res * a);
        __int128 x = a * a ;
        __int128 y = x * x ;
        __int128 z = y * y ;
        a= z * x ;
        b /= 10;
    }
    return res;
}
signed main(){
    scanf("%lld%lld",&n,&p);
    power(n,p);
    q1.print();
    return 0;
}
#include<bits/stdc++.h>//WA 高 精 乘
using namespace std;
#define ll long long
const long long M=1e9;
unsigned long long n,p;
unsigned long long a[1090010];
__int128 len;
inline void gc(){
    __int128 ans=0;
    for(register int i=1;i<=len;++i){
        a[i]=a[i]*n+ans;
        ans=a[i]/M;
        a[i]%=M;
    }
    while(ans){
        a[len+1]=ans;
        ans/=M;
        ++len;
    }
}
int main(){
    scanf("%llu%llu",&n,&p);
    len=(unsigned long long)(log10(n))+1;
    a[1]=1;
    for(int i=1;i<=p;++i) gc();
    while(!a[len]&&len>1) --len;
    for(int i=len;i>0;--i){
        if(i==len) printf("%llu",a[i]);
        else printf("%0*llu",9,a[i]);
    }
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 於黾 2022-11-04 17:25
    关注

    求个p的n次方,你为什么会有这么多代码,把无关的代码先删一删,把你关注的代码都调明白了再把那些一点一点的加上去,别一下什么都堆一起,没法调

    评论

报告相同问题?

问题事件

  • 创建了问题 11月4日

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项