Sicily 1009. Mersenne Composite N
来源:互联网 发布:怎样做好淘宝店铺 编辑:程序博客网 时间:2024/06/06 09:40
分析:
这道题可以简单的暴力算出0~63范围内满足要求的结果,然后直接打表。但是个人认为这种行为有点类似作弊。下面提供我的做法。
中间的代码都很好写,就是在因数分解的时候优化算法的过程。我自己没有想出好一点的做法,在网上参考了其他人的做法。大概解释一下,请看代码注释
Run Memory 288KB
Run Time 0.07sec
#include <stdio.h>#include <math.h>// 判断是否为质数bool isPrime (long long int n);int main() {int n;scanf("%d", &n);long long int factor[64] = {0}; // 存储因数的数组int count;for (int i = 2; i <= n; i ++) {count = 0;long long int uncheck = (1LL << i)-1; // 移位得出 2^n-1 的值if (i > 59 || i < 11 || !isPrime(i)) // 直接忽略小于11和大于59continue; long long int result = uncheck;long long int max = result;for(long long i=3; i <= max; i+= 2){ if(isPrime(i) && result % i == 0){factor[count++] = i; result /= i;if(isPrime(result)){ // 此处避免了很多运算,在进入下一步循环之前先判断是否质数,如果是则直接退出循环factor[count++] = result;break;}} else { max = result / i; }} if (count) {for (int j = 0; j < count - 1; j ++)printf("%lld * ", factor[j]); printf("%lld = %lld = ( 2 ^ %d ) - 1\n", factor[count - 1], (1LL << i)-1, i);}}return 0;}bool isPrime (long long int n) {int sqrtN = sqrt((double)n); if (n%2 == 0) return false;for (int i = 3; i <= sqrtN; i += 2)if (n%i == 0)return false;return true;}
网上的朋友有直接打表的,参考http://blog.sina.com.cn/s/blog_8c759b690100zr69.html
还有只对已知结果进行计算的,参考http://www.cnblogs.com/mjc467621163/archive/2011/07/04/2097278.html
中间因数分解参考xinlinqi在github上的代码https://github.com/xinlinqi/Sicily/blob/master/1009.Mersenne%20Composite%20N.cpp
0 0
- Sicily.1009. Mersenne Composite N
- Sicily 1009. Mersenne Composite N
- sicily 1009.Mersenne Composite N
- sicily 1009. Mersenne Composite N
- Sicily 1009. Mersenne Composite N
- sicily 1009. Mersenne Composite N
- sicily 1009. Mersenne Composite N
- [sicily online]1009. Mersenne Composite N
- 1009. Mersenne Composite N
- 1009. Mersenne Composite N
- 1009. Mersenne Composite N
- 1009. Mersenne Composite N
- 1009. Mersenne Composite N
- 1009. Mersenne Composite N 梅森素数
- POJ-2191-Mersenne Composite Numbers
- HOJ 2022 Mersenne Composite Numbers
- POJ 2191 Mersenne Composite Numbers 整数分解
- poj 2191 Mersenne Composite Numbers 大数分解
- 写给自己的序
- Tomcat使用MyEclipse远程调试Java代码配置详解
- Noip
- PAT basic1016-1020(Python版)
- c之深度搜索例题,南阳oj27--水池数目
- Sicily 1009. Mersenne Composite N
- XenServer Pool 紧急模式的恢复
- hadoop64位编译(linux)
- javascript的简单实用的方法
- 解决 ubuntu apache 页面禁止访问的问题
- JAVA设计模式之 单例模式【Singleton Pattern】
- 网络学习第一天 ---Ethernet帧结构解析
- Ubuntu 14.04下翻译软件的安装和比较
- 两个线性数据的插入