5.5 1059 Prime Factors (25 分)

60 篇文章 0 订阅

其实根本没必要来做素数表
按照分解质因子的方法直接只能够得到素数

#include <cstdio>
#include <cmath>
struct node
{
    int x;
    int cnt;
}fac[110];




int main()
{
    long fn,n,index=0;
    scanf("%ld",&fn);
    n = fn;
    for(int i = 2;i<fn;i++)
    {
        if(fn%i==0)
        {
            fac[index].x = i;
            fac[index].cnt = 0;
            while(fn%i==0)
            {
                fac[index].cnt++;
                fn/=i;
            }
            index++;
        }
    }
    if(fn!=1)
    {
        fac[index].x = fn;
        fac[index].cnt = 1;
        index++;
    }
    if(n==1)
        printf("1=1");
    if(n>1)
        printf("%d=",n);
    for(int i = 0;i<index;i++)
    {
        printf("%d",fac[i].x);
        if(fac[i].cnt>1)
            printf("^%d",fac[i].cnt);
        if(i!=index-1)
            printf("*");
    }
//    if( isPrime(fac[index - 1].x)==true)
//        printf("###1");
    return 0;
}

===========================================

错误在于1的时候要输出1=1
hence when there is only one p​i​​ , k​i
is 1 and must NOT be printed out.

错一个点23分

#include <cstdio>
#include <cmath>
struct node
{
    int x;
    int cnt;
}fac[110];

bool isPrime(int n)
{
    if(n<=1) return false;
    for(int i = 2;i<=sqrt(n);i++)
    {
        if(n%i==0)return false;
    }
    return true;
}

int pri[1010],temp = 0;

void FindPri(int n)
{
	for(int i = 2;i<=n;i++)
	{
		if(isPrime(i) == true)
			pri[temp++] = i;
	} 
	
//	for(int i = 0;i<temp;i++)
//		printf("%d\n",pri[i]);
} 



int main()
{
    long fn,n,index=0;
    scanf("%ld",&fn);
    n=fn;
    FindPri(1000);
    for(int i = 0;i<temp;i++)
    {
        if(n%pri[i]==0)
        {
            fac[index].x = pri[i];
            fac[index].cnt = 0;
            while(n%pri[i]==0)
            {
                fac[index].cnt++;
                n/=pri[i];
            }
            index++;
        }
    }
    if(n!=1)
    {
        fac[index].x = n;
        fac[index].cnt = 1;
        index++;
    }
    if(fn>1)
        printf("%d=",fn);
    for(int i = 0;i<index;i++)
    {
        printf("%d",fac[i].x);
        if(fac[i].cnt>1)
            printf("^%d",fac[i].cnt);
        if(i!=index-1)
            printf("*");
    }
//    if( isPrime(fac[index - 1].x)==true)
//        printf("###1");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值