题意:没看懂,实验室的队友们6翻了。
大体就是,打一个素数表,然后把这个数分解了。最后问的是有多少个不同的指数,和两个数之间的距离,也就是指数之差的和。
代码:
#include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; const int maxn=1123456; int prime[maxn]; int vis[maxn]; int init(int n) { memset(vis,0,sizeof(vis)); int len=0; for(int i=2; i<n; i++)// { if(vis[i]==0) { prime[len++]=i; for(int j=i*2; j<maxn; j+=i) { vis[j]=1; } } } return len; } const int maxm=88000; void solve(int n,int *s) { for(int i=0;i<maxm;i++) { s[i]=0; } int pos=0; while(n!=1) { while(n%prime[pos]==0)// { n/=prime[pos]; s[pos]++; } pos++; } } int A[maxm],B[maxm]; int main() { int a,b; int lener=init(maxn); int cas=1; while(~scanf("%d%d",&a,&b)&&(a||b)) { solve(a,A); solve(b,B); int dis=0; int d=0; for(int i=0; i<lener; i++) { if(A[i]||B[i]) { d++; dis+=abs(A[i]-B[i]); } } printf("%d. %d:%d\n",cas++,d,dis); } return 0; }
时间: 2024-11-05 08:05:48