Nikel_Chieh 2022-02-14 22:26 采纳率: 83.3%
浏览 38
已结题

求素数因子个数和··················

input
第一行t个测试案例
t行案例
output
逐行输出素数因子个数和

请问这样写有问题吗?

#include <stdio.h>
int isprime(int k)
{
    for (int i=2; i*i<=k; i++ )
    {
        if (k%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    int t;
    scanf("%d", &t);//t个测试案例
    while (t--)
    {
        int n;
        scanf("%d", &n);//输入案例
        int sum = 0;
        for (int i=2; i*i<=n; i++ )
        {
            if (isprime(i))
                if (n%i==0)
                    sum++;
        }
        if (isprime(n))
            sum++;
        printf("%d\n", sum);
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 谛凌 2022-02-14 22:54
    关注

    参考代码如下:

    #include <stdio.h>
    int isprime(int k)
    {
        if(k<2)
            return 0;
        for (int i=2; i*i<=k; i++ )
        {
            if (k%i==0)
                return 0;
        }
        return 1;
    }
    int main()
    {
        int t;
        scanf("%d", &t);//t个测试案例
        while (t--)
        {
            int n;
            scanf("%d", &n);//输入案例
            int sum = 0;
            for (int i=1; i<n; i++ )  //修改
            {
                if (n%i==0 && isprime(i))
                        sum++;
            }
            printf("%d\n", sum);
        }
        return 0;
    }
    
    

    因为题目说的是素数因子个数和,存在一定的歧义,可以理解为素数的因子的个数;也可以理解为数的素数因子。
    此处考虑后者:

    • 因此对输入的数据没有做素数判断,只是进行因子是不是素数的判断
    • 其次判断因子,应该是从1到n-1
    • 素数判断需要考虑小于2的情况,1不是素数,0和负数也不是
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月16日
  • 已采纳回答 2月15日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物