pat 甲级 1059 Prime Factors

简单题,自己的思路还不是很熟练

读题又读了半天,,,
学习打印素数表:
方法一:
把当前数的倍数都标为 非素数即可,双循环

        memset(check, 0, sizeof(check));
        for (int i = 2; i <= n; i++)
         {
             if (!check[i]) //是素数就放到结果数组中
                 prime[count++] = i;
             for (int j = i + i; j <= n; j += i)
                 check[j] = 1;
         }
         for (int i = 0; i < count; i++)
             printf("%d\n", prime[i]);

方法二:
方法一会有重复标记的地方,简化

         memset(check, 0, sizeof(check));
         count = 0;
         for (int i = 2; i <= n; i++)
         {
             if (!check[i])
                 prime[count++] = i;
             for (int j = 0; j < count; j++)
             {
                 if (i*prime[j] > MAXL)
                     break; // 过大的时候跳出
                 check[i*prime[j]] = 1;
                 if ((i%prime[j]) == 0) // 如果i是一个合数,而且i % prime[j] == 0
                    break; 
             }
         }
         for (int i = 0; i < count; i++)
             printf("%d\n", prime[i]);
#include <cstdio>
#include <iostream>
#include <vector>

using namespace std;

long long n;
vector<int> arr(500000,1);

int main(){

    scanf("%lld",&n);
    printf("%lld=",n);
    if(n==1) printf("1");
    for(int i = 2; i * i < 500000; i++)
        for(int j = 2; j * i < 500000; j++)
            arr[j * i] = 0;
    bool key = false;
    for(int i=2; n>=2 ; i++){
        int k = 0, cnt = 0;
        while(arr[i]==1&&n%i==0){
            cnt++;
            n = n/i;
            k = 1;
        }
        if(k==1){
            if(key) printf("*");
            printf("%d",i);
            key = true;
        }
        if(cnt >= 2) printf("^%d",cnt);
    }

    return 0;
}

明天六级,还有点小紧张,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值