我试图过滤出质数。例如,我输入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/

10-14 06:29