Prime Land(poj 1365)
Posted Cola
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prime Land(poj 1365)相关的知识,希望对你有一定的参考价值。
题意:这题题意难懂,看了题解才知道的。比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了。
#include<cstdio> #include<cstring> #include<iostream> #define M 100010 #define ll long long using namespace std; ll x[M],y[M],sum,ans1[M],ans2[M]; int cnt; ll poww(ll a,ll b) { ll r=1,base=a; while(b) { if(b&1)r*=base; base*=base; b/=2; } return r; } int main() { while(1) { cnt=0;sum=1; memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); while(1) { ++cnt; ll num=0;char c=getchar(); while(c>=\'0\'&&c<=\'9\') num=num*10+c-\'0\',c=getchar(); x[cnt]=num; if(num==0)return 0; num=0;c=getchar(); while(c>=\'0\'&&c<=\'9\') num=num*10+c-\'0\',c=getchar(); y[cnt]=num; if(c==\'\\n\')break; } for(int i=1;i<=cnt;i++) sum*=poww(x[i],y[i]); cnt=0;sum--; for(ll i=2;i<=sum;i++) { ll tot=0; while(sum&&sum%i==0) sum/=i,tot++; if(tot) { ++cnt;ans1[cnt]=i;ans2[cnt]=tot; } if(sum==0)break; } for(ll i=cnt;i>=1;i--) cout<<ans1[i]<<" "<<ans2[i]<<" "; printf("\\n"); } return 0; }
以上是关于Prime Land(poj 1365)的主要内容,如果未能解决你的问题,请参考以下文章