当前位置:首页 > 题解目录 > 正文内容

【题解】求次方和

亿万年的星光3年前 (2023-01-07)题解目录16660

【题目描述】

    求解 (2^0 + 2^1 + 2^2+ ... + 2^n) % 2333

【输入描述】

    一行,一个整数n。

【输出描述】

    一行,表达式的正确结果

【样例输入】

2

【样例输出】

7

【题目分析】

  • 从题目上看,并不难,只要循环相乘后在模2333就可以求出结果来了。

  • 如果考虑到程序中的数据范围,那么大概率是要超int范围的



【参考代码1】

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int ans=0;
	int n=1000;
	for(int i=0;i<=n;i++){
		int temp=1;
		for(int j=1;j<=i;j++){
			temp=temp*2;
		}
		ans=ans+temp;
	}
	cout<<(ans%2333);
	return 0;
}

上面这段参考代码是大部分人能写出来的版本,但是这段代码在运算过程中非常容易超int范围,所以需要改进一下,我们用数论里的知识进行改进。

用的是下面两个公式:

(a+b)%p=(a%p+b%p)%p;
(a*b)%p=a%p*b%p;

那么我们可以把程序改成下面这样:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int ans=0;
	int n=1000;
	for(int i=0;i<=n;i++){
		int temp=1;
		for(int j=1;j<=i;j++){
			temp=temp*2;
			temp=temp%2333;  //边乘边模!!!
		}
		ans=ans+temp;
		ans=ans%2333;   //边加边模!!!
	}
	cout<<(ans%2333);
	return 0;
}

例题2:

【题目描述】

已知S(n)=n^5,求S(n)模3的值

【输入描述】

一行,一个整数n。(1<n<1000000)。

【输出描述】

一行,正确的结果。

【样例输入】

1

【样例输出】

1

【题目分析】

  • 因为int的范围最多是10^9。long long 的范围最多表示10^18。这里n^5次方非常容易超过long long,超过了long long一般有两个思路,要么用高精度,要么缩减运算范围。

  • 本题有明显模运算,这提示我们不用考虑高精度了。

  • n^5=n*n*n*n*n。 所以 (n^5)%3=(  (n%3)*(n%3)*(n%3)*(n%3)*(n%3)  ) % 3。然后就可以套公式了

【参考代码】

#include<bits/stdc++.h>
using namespace std;

int main() {
	int n=999998;
	int ans=1;
	for(int i=1; i<=5; i++) {
		int temp=n%3;
		ans=ans*temp;
	}
	cout<<(ans%3); //最后还要模一次3
}




扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】均分蛋糕

【题解】均分蛋糕

【题目描述】小明的生日要到了!根据习俗,他需要将一些派分给大家。他有 N 个不同口味、不同大小的派。有 F 个朋友会来参加我的派对,每个人会拿到一块派(必须一个...

【题解】区间和

1.区间和(sum.cpp)【描述】输入一个整数Q,进行Q次询问,每次给定两个整数l和r,每一次输出l~r中所有平方数的和 % 1000000007【输入】第一行是一个整数Q后面的Q行每行有...

【题解】最小子序列

【题目描述】给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长...

【题解】给定和为定数

【题目描述】给出若干个整数,询问其中是否有一对数的和等于给定的数。【输入描述】第一行是整数n(0 < n ≤ 100,000),表示有n个整数。第二行是n个整数。整数的范围是在0到108之间。第...

【题解】合唱队形

【题目描写】N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T...

【题解】变换数组

【题目描述】输入一个数组 a,包含有 n 个元素 a1,a2,⋯,an。对这个数组进行 m 次变换,每次变换会将数组 a ...