我试图过滤出质数。例如,我输入7;输出将是7是几率,因子数是2和3。如果输入55,因子数是6和9。它总是用我给出的数字减一来计算结果。
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int n,factor1,factor2;
bool factor(int number,int *firstFactor,int *secondFactor);
bool isPrime,prime;
int main(){
printf("Please give a number, we will tell you if it is a prime number: ");
scanf("%d",&n);
isPrime=factor(n, &factor1,&factor2);
if(isPrime)
{printf("The number %d is prime\n",n);
}
else{
printf("%d is odd.The possible factor is %d and %d.\n",n,factor1,factor2);
}
return 0;
}
bool factor(int number,int *firstFactor,int *secondFactor){
int i;
i=sqrt(number);
for(i; i>1;i--){
if(number%i==0){ break;
}
*firstFactor=i;
*secondFactor=number/i;
}
//while(!prime);
//prime=false;
return(prime==1);
}
最佳答案
您缺少因子函数中的两个语句。
首先定义一个变量素数。
int prime=1;
其次,在循环中,您需要在break语句之前将质数指定为0
prime=0
您的最终代码成为
bool factor(int number,int *firstFactor,int *secondFactor){
int i;
i=sqrt(number);
int prime=1;
for(i; i>1;i--){
if(number%i==0){
prime=0;
*firstFactor=i;
*secondFactor=number/i;
break;
}
}
//while(!prime);
//prime=false;
return(prime==1);
}
编辑:
此外,一旦语句运行,循环就会中断,因此永远不会调用您要查找因素的语句。尝试将其移动到if内,或尝试在这些语句之后中断循环
关于c - 不会滤除素数并在c中给出错误的因数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50110293/