您的位置:首页 > 其它

poj 1365 Prime Land

2015-03-26 10:43 218 查看
一开始被输入格式卡住了,水题一道。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<iomanip>
#include<climits>
#include<string.h>
#include<numeric>
#include<cmath>
#include<stdlib.h>
#include<vector>
#include<stack>
#include<set>
#define INF 1e7
#define MAXN 100010
#define maxn 1000010
#define Mod 1000007
#define N 1010
using namespace std;
typedef long long LL;

int prime[32000];
int vis[32000];
void run()
{
int k = 1;
for (int i = 2; i <= 32000; ++i)
if (!vis[i]) {
prime[k++] = i;
for (int j = i*i; j <= 32000; j += i)
vis[j] = 1;
}
/*for (int i = 1; i < k; ++i)
cout << prime[i] << " ";
cout << endl;*/
}

int n, m;
int p[33000], e[33000];
int index, flag, cnt;
int main()
{
run();
while (1) {
index = 0;
flag = 0;
while (1) {
cin >> n;
if (n == 0) {
flag = 1;
break;
}
cin >> m;
p[index] = n, e[index++] = m;
char ch = getchar();
if (ch == '\n') break;
}
if (flag == 1) break;
LL num = 1;
for (int i = 0; i < index; ++i) {
num *= pow(p[i], e[i]);
}
num--;
int k = 2;
cnt = 0;
memset(p, 0, sizeof(p));
memset(e, 0, sizeof(e));
while (num != 1) {
while (num % k == 0) {
p[cnt] = k;
num /= k;
e[cnt]++;
}
k++;
cnt++;
}
for (int i = cnt - 1; i >= 0; --i) if (p[i]){
if (i != cnt - 1) cout << " ";
cout << p[i] << " " << e[i];

}
puts("");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: