(3^n + 2^n) % 10 for large n
(3^n + 2^n) % 10 for large n
,所以我有一个最多9位数字的数字,我必须获得3^n 2^n的最后一个数字。是否有这种问题的规则?我到目前为止的代码:
#include <fstream>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream fin("input.in");
ofstream fout("input.out");
int main(){
int n;
fin>>n;
fout<<fmod(pow(3,n)+pow(2,n),10);
}
但是,如果我使用它,并且n大于1000,则显示nan。
我的问题是:是否有这样的问题?
好吧,我们知道(3^n + 2^n) % 10
= ((3^n % 10) + (2^n % 10)) % 10
,因此我们可以使用模块化指数快速解决此问题。
基本前提是3^n % 10 = (3 * (3^(n-1) % 10)) % 10
好吧,最简单的答案是:
3^0 === 1;
3^1 === 3;
3^2 === 9;
3^3 === 7;
3^4 === 1;
3^5 === 3;
so,3^n的最后一个数字为3、9、7或1,基于n。n%4 == 0 => 3^n的最后一个数是1,== 1 => 3,== 2 => 9,== 3 =>7。
您可以写出2^n:
的书写1, 2,4,8,6 ,2,...
可以一直重复此周期,排除主要规则:2^n的最后一位数字是:
N == 0 => 1
N > 0 =>
(N - 1) % 4 == 0 => 2
(N - 1) % 4 == 1 => 4
(N - 1) % 4 == 2 => 8
(N - 1) % 4 == 3 => 6
在计算了3^n和2^n的最后一个数字之后,只需将它们添加在一起。
您可以数学上解决它。让我们看一下序列u n = 3^n%10:u 0 = 1,然后再次3、9、7和1。它立即给出:
u 4K = 1,U 4K 1 = 3,u 4K 2 = 9,U
现在查看V n = 2 n %10:v 0 = 1,然后2,4,8,6,然后2再次。它给出了k> 0:
v 4K = 6,V 4K 1 = 2,V 4K 2 = 4,V 4K 3 = 8
您立即获得结果:对于n> 1,只需查看n'= n%4,结果分别为7、5、3、5
在C 中,它将给出:
#include <fstream>
using namespace std;
ifstream fin("input.in");
ofstream fout("input.out");
int main(){
int n;
fin>>n;
int result[] = { 7,5,3,5};
fout<<(n == 0) ? 2 : result[n%4];
return 0;
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- std::memory_order for std::atomic:<T>:wait
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- (3^n + 2^n) % 10 for large n