HDU1164 Eddy's research I

题目链接
题目要求对输入的数进行分解质因数,如果输入的数据是质数,则直接输出,输入的数据范围1<x<=65535

输入的数据小于65536,则只需要测试能否被小于√65536=256的素数整除即可。

因为题目给的区域比较小,所以可以从2,3,4,5……按从小到大次序直接试除,若能被整除,则可以把输入的数除以这个数,并且输出。因为是从小到大进行试除,所以不会输出合数。

可以在程序中放置一个素数表进行优化,小于256的素数有54个,可以直接放到程序中(也可以用筛选法等算一个合适的素数表,若不确定数据多大,可以用多少算多少)。

C语言代码

#include <stdio.h>

#define PMAX 54

int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251};
void calc(int n){
    int i;
    int first=1;
    i=0;
    while(i<PMAX&&p[i]<n){
        if(n%p[i]==0){
            n/=p[i];
            if(first)
                first = 0;
            else
                putchar('*');

            printf("%d",p[i]);
        }else
            i++;
    }
    //此时n只能是1,或者大于256的素数
    if(n!=1){
        if(first)
            first = 0;
        else
            putchar('*');
        
        printf("%d",n);
    }
    putchar('\n');
}

int main(void)
{
    int n;
    while(scanf("%d",&n)!=EOF){
        calc(n);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值