半素数问题,我自己写了一个,但是有问题,求大佬帮看看
若一个自然数可以表示成两个素数乘积的形式,这个自然数就叫做半素数我写的代码如下,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: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;
} 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]