决定一个数字是完美的还是素数

时间:2010-12-12 21:01:13

标签: c++ numbers primes modulus perfect-numbers

问题是: “写一个函数来确定一个数字是一个素数还是一个完整的数字。”

到目前为止,我已经完成了最完美的部分,这就是我所拥有的:

#include <iostream>
using namespace std;
bool perfectNumber(int);
int main()
{
 int number;

 cout<<"Please enter number:\n";
 cin>>number;
 bool perfectNumber(number);

 return 0;
}
bool perfectNumber(int number)
{
 int i;

 int sum=0;
 for(i=1;i<=number/2;i++)
 {
  if(number%i==0)
  {
   sum+=i;
  }
 }
 if (sum==number)
  return i;
 else
  return 0;
}

然而,此代码似乎有错误。 我查看了这本书,但没有谈论这个话题。 我想获得有关如何修复此代码的建议。

谢谢!

4 个答案:

答案 0 :(得分:7)

bool perfectNumber(number);

这不会调用perfectNumber函数;它声明了一个名为perfectNumber的{​​{1}}类型的局部变量,并使用转换为bool类型的number值对其进行初始化。

要调用bool函数,您需要使用以下内容:

perfectNumber

或:

bool result = perfectNumber(number);

另一方面说明:如果要从流中读取输入(例如bool result(perfectNumber(number)); ),则必须检查以确保从流中提取值成功。就像现在一样,如果您输入cin>>number,则提取将失败,asdf将保持未初始化状态。检查提取是否成功的最佳方法是测试流的状态:

number

您可以在Semantics of flags on basic_ios中详细了解如何设置和重置流错误状态。您还应该咨询a good, introductory-level C++ book以获取更多流使用最佳实践。

答案 1 :(得分:1)

void primenum(long double x) {
    bool prime = true; 
    int number2;
    number2 = (int) floor(sqrt(x));// Calculates the square-root of 'x'

    for (int i = 1; i <= x; i++) {
        for (int j = 2; j <= number2; j++) {
            if (i != j && i % j == 0) {
                prime = false;
                break;
            }
        }
        if (prime) {
            cout << " " << i << " ";
            c += 1;
        }
        prime = true;
    }
}

答案 2 :(得分:1)

 bool isPerfect(  int number){
     int i;
     int sum=0;
     for(i=1;i<number ;i++){
         if(number %i == 0){
             cout<<"  " << i ;
             sum+=i;
         }
     }

     if (sum == number){
         cout<<"\n \t\t THIS NUMBER  >>>  "<<  number <<"   IS    PERFECT \n\n";
         return i;
     }else if (sum |= number) {
               cout<<"\nThis number >>> " <<  number <<"   IS  NOT  PERFECT \n\n";
               return 0;
     }
 }

答案 3 :(得分:-1)

#pragma hdrstop

#include <tchar.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------


bool is_prim(int nr)
{

    for (int i = 2; i < nr-1; i++) {

    if (nr%i==0) return false;

    }

    return true;

}

bool is_ptr(int nr)
{
    int sum=0;

    for (int i = 1; i < nr; i++) {

    if (nr%i==0) {
        sum=sum+i;
    }

    }

    if (sum==nr) { return true;

    }
    else return false;
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int numar;

    printf ("Number=");scanf("%d",&numar);
    if (is_prim(numar)==true) { printf("The number is prime");

    }
    else printf("The number is not prime");

    if (is_ptr(numar)==true) { printf(" The number is perfect");

    }
    else printf(" The number is not perfect");
    getch();
    return 0;
}