蓝桥杯2020年真题:八次求和

题目

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】 
给定正整数 n,1^8 + 2^8 +···+ n^8 mod 123456789 。其中 mod 表示取余。
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行,包含一个整数,表示答案。
【样例输入】 
2
【样例输出】 
257
【样例输入】 
987654
【样例输出】 
43636805
【评测用例规模与约定】 
对于 20% 的评测用例,1≤n≤20。 
对于 60% 的评测用例,1≤n≤1000。 
对于所有评测用例,1≤n≤1000000

答案

package competition4;

import java.util.Scanner;

public class SumEight
{
    
    
	public static void main(String[] args)
	{
    
    
		/*
		 * 为什么将所有的数据类型都改成long类型呢?
		 * 因为评测用例规模与约定中对于所有评测用例,1≤n≤1000000。
		 * 如果是int类型的话,n*n在n=1000000的时候会溢出
		 */
		Scanner in = new Scanner(System.in);
		long n=in.nextLong();
		in.close();
		int mod=123456789;
		long result=0;
		long temp=1;
		
		//for循环遍历1到n的每一个数的八次方
		for(long x=1;x<=n;x++)
		{
    
    
			//下面一个for循环就是得到x的八次方的值,每一次都初始化temp的值
			temp=1;
			for(int y=1;y<=4;y++)
			{
    
    
				//进行四次循环,每一次都是x的平方,而且每一次平方后都取模
				//这样保证它不会溢出
				temp =(temp*((x*x) %mod))%mod; 
			}
			//将x的八次方加起来,进入下一个x的八次方
			result =(result+temp)%mod;
		}
		System.out.println(result);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43416157/article/details/109006197