2023河南萌新联赛第(三)场:郑州大学 F - 数学题

2023河南萌新联赛第(三)场:郑州大学 F - 数学题

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

给出n,x,请你输出这个式子的值对998244353取余
s u m = ∏ i = 0 n ( 1 + x ( 2 i ) ) sum=\prod_{i = 0}^n(1+x^{(2^i)}) sum=i=0n(1+x(2i))

输入描述:

输入一行两个整数 n n n x x x
保证 0 < n < 1 0 18 00<n<1018 1 < x < 1 0 18 11<x<1018

输出描述

输出式子的值对998244353取余的结果

示例1

输入

3 2

输出

65535

原 = ∏ i = 0 n ( 1 + x ( 2 i ) ) = ( 1 − x ) ∏ i = 0 n ( 1 + x ( 2 i ) ) 1 − x 将上面的式子通过平方差公式连续化简 n 次就能得到 原式 = ( 1 − x 2 ( n + 1 ) ) 1 − x 即可 o ( l o g n ) 得到式子的值 原=\prod_{i = 0}^n(1+x^{(2^i)})=(1-x)\frac{\prod_{i = 0}^n(1+x^{(2^i)})}{1-x}\\将上面的式子通过平方差公式连续化简n次就能得到\\原式=\frac{(1-x^{2^{(n + 1)}})}{1-x}即可o(logn)得到式子的值 =i=0n(1+x(2i))=(1x)1xi=0n(1+x(2i))将上面的式子通过平方差公式连续化简n次就能得到原式=1x(1x2(n+1))即可o(logn)得到式子的值
注意 : 1. 对指数取模的时候根据欧拉定理应该取模 ( m o d − 1 ) 2. 当 x 的值为 1 时要特判,否则分母为 0 。此时输出 2 的 n + 1 次方即可 注意:\\1.对指数取模的时候根据欧拉定理应该取模(mod -1) \\ 2.当x的值为1时要特判,否则分母为0。此时输出2的n+1次方即可 注意:1.对指数取模的时候根据欧拉定理应该取模(mod1)2.x的值为1时要特判,否则分母为0。此时输出2n+1次方即可

import java.io.*;

public class Main {
    private static final int MOD = 998244353;

    public static long ksm(long a, long b, long mod) {
        a %= mod;
        long res = 1;
        for (; b != 0; b >>= 1) {
            if ((b & 1) == 1) {
                res = res * a % mod;
            }
            a = a * a % mod;
        }
        return res;
    }

    public static long inv(long x) {
        return ksm(x, MOD - 2, MOD);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] str = bf.readLine().split(" ");
        long n = Long.parseLong(str[0]);
        long x = Long.parseLong(str[1]);
        x %= MOD;
        if (x == 1) {
            bw.write(String.valueOf(ksm(2, n + 1, MOD)));
        } else {
            long k = ksm(2, n + 1, MOD - 1);
            bw.write(String.valueOf((ksm(x, k, MOD) - 1 + MOD) % MOD * inv(x - 1) % MOD));
        }
        bw.close();
    }
}

你可能感兴趣的:(#,Java刷题,#,数论,大数,游戏,算法)