/*
梅森素数,将乘数递归调用求乘子函数,最终可以得到其所有质数乘数
再将其排序输出即可
*/
/*
Run Time: 0.03secs
Run Memory: 312KB
*/
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
long long list[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61};
long long k; //0-63
long long num;
vector<long long> results;
//找出一个数的所有质数约数
void comput(long long buf){
int most = (int)pow(buf, 0.5) + 1;
bool flag = true;
for(long long i = 2; i<most; i++){
if(buf%i == 0){
flag = false;
comput(i);
comput(buf / i);
break;
}
}
if(flag)
results.push_back(buf);
}
int main()
{
cin >> k;
for(int i=0; list[i]<k && i<18; i++){
results.clear();
num = (long long)(pow(2, list[i]) - 1);
comput(num);
if(results.size() == 1)
continue;
sort(results.begin(), results.end());
cout << results[0];
for(int j=1; j<results.size(); j++)
cout << " * " << results[j];
cout << " = " << num << " = ( 2 ^ " << list[i] << " ) - 1" << endl;
}
return 0;
}
Sicily 1009. Mersenne Composite N
最新推荐文章于 2014-12-15 17:08:50 发布