灯火阑珊201 发表于 2022-10-26 20:20:42

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

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

我写的代码如下,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函数应该是没有问题的
不知道问题在哪,求解

jhq999 发表于 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;
}

jackz007 发表于 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                                                 ;
}
页: [1]
查看完整版本: 半素数问题,我自己写了一个,但是有问题,求大佬帮看看