Prime Land
istringsteam简单的用法。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <string.h>
#include <sstream>
#include <math.h>
#define maxm 33000
using namespace std;
int prime[maxm],isprime[maxm],x,y,vis[maxm];
void init_prime(){
memset(isprime,1,sizeof(isprime));
prime[0]=0;
for(int i=2;i<=maxm;i++){
if(isprime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0];j++){
if(i*prime[j]>maxm)break;
isprime[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
int main()
{
init_prime();
string line;
while(getline(cin,line),line[0]!=48){
istringstream stream(line);
long long sum=1,x,y;
while(stream>>x>>y){
sum *= floor(pow((double)x,(int)y)+0.5);
}
sum-=1;
memset(vis,0,sizeof(vis));
for(int i =1;i<=prime[0];i++){
while(sum%prime[i]==0){
vis[prime[i]]++;
sum/=prime[i];
}
}
for(int i = 33000;i>=1;i--){
if(vis[i]!=0){
printf("%d %d ",i,vis[i]);
}
}
printf("\n");
}
return 0;
}