求大佬hack
  • 板块学术版
  • 楼主SkyWave
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/9/27 15:49
  • 上次更新2023/10/27 09:47:13
查看原帖
求大佬hack
234992
SkyWave楼主2022/9/27 15:49

我测试了好久都没有找出问题,求大佬帮助给出一组hack数据

题目:SP26368(链接)

//
//  main.cpp
//  SP26368 PWRANDMOD - Power and Mod
//
//  Created by SkyWave Sun on 2022/9/27.
//

#include <iostream>
#include <cstring>
using namespace std;
unsigned __int128 quickPow(const unsigned __int128 &a, unsigned __int128 &b, const unsigned  __int128 &MOD) {
    unsigned __int128 ans = 1;
    unsigned __int128 base = a;
    base %= MOD;
    while (b) {
        if (b & 1) {
            ans *= base;
            ans %= MOD;
        }
        base *= base;
        base %= MOD;
        b >>= 1;
    }
    return ans%MOD;
}
char str1[30];
char str2[30];
char str3[30];
char anstring[30];
int main(int argc, const char * argv[]) {
    int t;
    scanf("%d",&t);
    while (t--) {
        unsigned __int128 a = 0,b = 0,m = 0;
        scanf("%s%s%s",str1,str2,str3);
        unsigned short len1 = strlen(str1);
        unsigned short len2 = strlen(str2);
        unsigned short len3 = strlen(str3);
        for (int i = 0; i<len1; ++i) {
            a *= 10;
            a += str1[i] - '0';
        }
        for (int i = 0; i<len2; ++i) {
            b *= 10;
            b += str2[i] - '0';
        }
        for (int i = 0; i<len3; ++i) {
            m *= 10;
            m += str3[i] - '0';
        }
        unsigned __int128 ans = quickPow(a, b, m);
        if (ans == 0) {
            putchar('0');
            putchar('\n');
            continue;
        }
        unsigned short pos = 0;
        while (ans) {
            anstring[pos++] += ans % 10 + '0';
            ans /= 10;
        }
        unsigned short len4 = strlen(anstring);
        for (int i = len4 - 1; i>=0; --i) {
            putchar(anstring[i]);
        }
        putchar('\n');
    }
    return 0;
}

2022/9/27 15:49
加载中...