【题解】八次求和

【问题描述】

给定正整数 n, 求 1^8 + 2^8 +···+ n^8 mod 123456789 。其中 mod 表示取余。

【输入格式】

输入的第一行包含一个整数 n。

【输出格式】

输出一行,包含一个整数,表示答案。

【样例输入】

​ 2

【样例输出】

​ 257

【样例输入】

​ 987654

【样例输出】

​ 43636805

思路

方法一:

  1. 这种题目是大数求和,一般的数据类型会溢出,不能用。
  2. 用BigInteger来处理大数。

方法二:

  1. 使用位运算,快速求解。

【代码】

解法一:

import java.math.BigInteger;
import java.util.Scanner;

public class topic07 {
    public static void main(String[] args) {
        BigInteger begin; // 记录每次遍历的数,并对其未8次幂
        BigInteger sum = BigInteger.ZERO; // 0 , 记录每次求和结果

        System.out.print("请输入n:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        // 遍历求和
        for (int i = 1; i <= n; i++) {
            begin = BigInteger.valueOf(i).pow(8);// 对每个数未8次幂
            sum = sum.add(begin); // 求和
        }

        String model = "123456789";

        //对结果mod123465789并打印输出
        System.out.println(sum.mod(new BigInteger(model)));
    }
}

解法二:

import java.util.Scanner;

public class topic07_2 {
    static long mod_number = 123456789;//题目要求

    public static void main(String[] args) {
        System.out.print("请输入一个数:");
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        long sum = 0; // 记录所求的数

        for (long i = 1; i <= n; i++) {
            sum = (sum + quickPow(i, 8)) % mod_number;
        }
        System.out.println(sum);
    }

    // 快速求幂
    static long quickPow(long n, long pow) {
        long sum = 1;
        while (pow > 0) {

            // 结果赋值条件。
            if ((pow & 1) == 1) {
                sum = (sum * n) % mod_number;
            }

            n = (n * n) % mod_number;
            pow >>= 1;//移位运算
        }
        return sum; // 返回幂运算结果
    }
}

结果

43636805

posted @   Gonfei  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示