鱼C论坛

 找回密码
 立即注册
查看: 3066|回复: 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
  1. int isQAPrime(int num)
  2. {
  3.         int i , j , flag = 0                                        ;
  4.         for(i = 2 ; i <= sqrt(num) ; i ++) {
  5.                 if(num % i == 0) {
  6.                         if(isPrime(i) && isPrime(num / i)) flag = 1 ;
  7.                         break                                       ;
  8.                 }
  9.         }
  10.         return flag                                                 ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  12. #include<math.h>
  13. int isQAPrime(int num)
  14. {
  15.     int i;
  16.     for(i=2; i<=sqrt(num); i++)
  17.     {
  18.         if(0==num%i)break;//一个数除了1以外的最小的因子一定是素数
  19.     }
  20.     if(i==sqrt(num)+1)return 0;//一个数是素数,就不是半素数
  21.     num=num/i;
  22.     for(i=2; i<=sqrt(num); i++)//和最小因子对应的因子如果不是素数,那么这个数不是半素数
  23.    {
  24.         if(0==num%i)return 0;
  25.         }
  26.     return 1;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-26 21:01:17 | 显示全部楼层    本楼为最佳答案   
  1. int isQAPrime(int num)
  2. {
  3.         int i , j , flag = 0                                        ;
  4.         for(i = 2 ; i <= sqrt(num) ; i ++) {
  5.                 if(num % i == 0) {
  6.                         if(isPrime(i) && isPrime(num / i)) flag = 1 ;
  7.                         break                                       ;
  8.                 }
  9.         }
  10.         return flag                                                 ;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 06:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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