POJ 3993 / HDU 3353

题意:没看懂,实验室的队友们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
",cas++,d,dis);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/qioalu/p/5226718.html