鱼C论坛

 找回密码
 立即注册
查看: 2675|回复: 2

[已解决]半素数问题,我自己写了一个,但是有问题,求大佬帮看看

[复制链接]
发表于 2022-10-26 20:20:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
若一个自然数可以表示成两个素数乘积的形式,这个自然数就叫做半素数

我写的代码如下,isPrime函数是用来判断是不是素数的,isQAPrime函数是用来判断是不是半素数的

#include <stdio.h>

int isQAPrime(int num);
int isPrime(int n);
int main()
{
    int num;
    scanf("%d", &num);
    if(isQAPrime(num))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}

#include<math.h>
int isQAPrime(int num)
{
    int i,j,flag=0;
    int x=num;
    for(i=2; i<=sqrt(x); i++)
    {
        if(x==1)
        {
            flag=1;
            break;
        }
        if(isPrime(i)&&!(x%i))
        {
            x/=i;
            i=2;
            continue;
        }
    }
    return flag;
}
int isPrime(int n)
{
    int i,flag=1;
    if(n==1||n==2) flag=1;
    else
    {
        for(i=2; i<=sqrt(n); i++)
        {
            if(!(n%i))
            {
                flag=0;
                break;
            }
        }
    }
    return flag;
}


经过我测试isPrime函数应该是没有问题的
不知道问题在哪,求解
最佳答案
2022-10-26 21:01:17
int isQAPrime(int num)
{
        int i , j , flag = 0                                        ;
        for(i = 2 ; i <= sqrt(num) ; i ++) {
                if(num % i == 0) {
                        if(isPrime(i) && isPrime(num / i)) flag = 1 ;
                        break                                       ;
                }
        }
        return flag                                                 ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-26 21:00:46 | 显示全部楼层
本帖最后由 jhq999 于 2022-10-26 21:04 编辑
int isQAPrime(int num);
int main()
{
    int num;
    scanf("%d", &num);
    if(isQAPrime(num))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}

#include<math.h>
int isQAPrime(int num)
{
    int i;
    for(i=2; i<=sqrt(num); i++)
    {
        if(0==num%i)break;//一个数除了1以外的最小的因子一定是素数
    }
    if(i==sqrt(num)+1)return 0;//一个数是素数,就不是半素数
    num=num/i;
    for(i=2; i<=sqrt(num); i++)//和最小因子对应的因子如果不是素数,那么这个数不是半素数
   {
        if(0==num%i)return 0;
        }
    return 1;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 21:01:17 | 显示全部楼层    本楼为最佳答案   
int isQAPrime(int num)
{
        int i , j , flag = 0                                        ;
        for(i = 2 ; i <= sqrt(num) ; i ++) {
                if(num % i == 0) {
                        if(isPrime(i) && isPrime(num / i)) flag = 1 ;
                        break                                       ;
                }
        }
        return flag                                                 ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 23:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表