蓝桥-ALGO-26-麦森数
来源:互联网 发布:csmar数据库 编辑:程序博客网 时间:2024/06/05 09:02
ACM模版
描述
题解
我想先建议出这道题或者翻译这道题的人去看看 《具体数学》这本书的 P91,了解了解基础的概念……
梅森数,又叫麦森数,不过我也是今天才知道还叫麦森数,不过,只要是形如
这个题中,首先让输出位数,其实这是一个公式,
至于如何求具体的后五百位,其实这也不难,类似于快速幂的求法,其实就是一个二分思想。
代码
#include <stdio.h>#include <math.h>#include <string.h>const int MAXBIT = 501;int num[MAXBIT];int tmp[MAXBIT];int tep[MAXBIT];void multiply(int a[], int b[]){ memset(tep, 0, sizeof(tep)); for (int i = MAXBIT - 1; i >= 1; i--) { for (int j = MAXBIT - 1, k = i; j >= 1; j--) { tep[k--] += a[i] * b[j]; if (k == 0) { break; } } } for (int i = MAXBIT - 1; i >= 1; i--) { if (tep[i] >= 10) { tep[i - 1] += tep[i] / 10; tep[i] %= 10; } a[i] = tep[i]; }}void msss(int power){ if (power <= 1) { num[MAXBIT - 1] *= 2; return ; } else { msss(power / 2); multiply(num, num); if (power % 2 != 0) { multiply(num, tmp); } }}int main(){ int p; scanf("%d", &p); num[MAXBIT - 1] = 1; tmp[MAXBIT - 1] = 2; msss(p); num[MAXBIT - 1]--; printf("%d\n", (int)(p * log10(2)) + 1); for (int i = 1; i < MAXBIT; i++) { printf("%d", num[i]); if (i % 50 == 0) { printf("\n"); } } return 0;}
阅读全文
0 0
- 蓝桥-ALGO-26-麦森数
- 蓝桥-ALGO-33-数列
- 蓝桥-ALGO-40-会议中心
- 蓝桥 ALGO-2 最大最小公倍数
- 蓝桥-ALGO-9-摆动序列
- 蓝桥-ALGO-10-集合运算
- 蓝桥-ALGO-12-幂方分解
- 蓝桥-ALGO-13-拦截导弹
- 蓝桥-ALGO-14-回文数
- 蓝桥-ALGO-16-进制转换
- 蓝桥-ALGO-17-乘积最大
- 蓝桥-ALGO-18-单词接龙
- 蓝桥-ALGO-19-方格取数
- 蓝桥-ALGO-20-求先序排列
- 蓝桥-ALGO-22-数的划分
- 蓝桥-ALGO-24-统计单词个数
- 蓝桥-ALGO-27-FBI树
- 蓝桥-ALGO-28-星际交流
- 将数据的初始化放到docker中的整个工作过程(问题记录)
- java设计模式之单例模式5种方法及优缺点小结
- 周小结
- 1.2执行更高级的线程任务(Performing More Advanced Thread Tasks)
- 常见Map 及 ArrayList 是否有序总结
- 蓝桥-ALGO-26-麦森数
- 利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
- 牛客错题1
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- Rcpp手册(旧)
- 2017 山东理工第九届校赛 H C~K玩游戏(博弈)
- 日拱一卒——160个crackme之#3
- java 基础(一)
- Linux学习(二):复制命令cp的注意事项