现在的位置: 首页 > 综合 > 正文

hdu 1164 Eddy’s research I (水题,打表)

2017年11月23日 ⁄ 综合 ⁄ 共 641字 ⁄ 字号 评论关闭

小记:忘记n==1时break了。WA了一次

思路:先建一个素数表,然后对输入的数从第一个素数开始除,能除掉的就除掉,然后输出,直到最后输入的数除的只剩下1就可以退出了。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

#define N 100010
#define MAX 1000010

int p[MAX];
bool  flag;
int T, a, b, ans,n;

int PrimeTable(int prime[])//打印素数表
{
    int pNum=0;
    prime[pNum++]=2;

    for(int i=3;i <= MAX ; i+=2)  //奇偶法
    {
        bool flag=true;
        for(int j=0;prime[j]*prime[j]<=i;j++)  //根号法+递归法
            if(!(i%prime[j]))
            {
                flag=false;
                break;
            }
        if(flag)
            prime[pNum++]=i;
    }
    return pNum;
}

int main() {
    T = PrimeTable(p);
    while(~scanf("%d",&n)) {
        flag = 0;
        for(int i = 0; i < T; ++i){
            while(n%p[i]==0){
                n/=p[i];
                if(flag){
                    printf("*%d",p[i]);
                }
                else {
                    flag =1;
                    printf("%d",p[i]);
                }
            }
            if(n == 1)break;
        }
        printf("\n");
    }
    return 0;
}

抱歉!评论已关闭.