繁体   English   中英

素数函数C ++

[英]Prime number function C++

我正在使用文件流,将整数读入infile,然后将那些正数读入指向outfile的数组。 我对数组进行冒泡排序,并且需要找到平均值,方差,标准差和素数。 我的质数函数遇到问题,它根本没有将任何内容流式传输到我的文件中。 我的终端在这里的照片 这也误算了我的平均值。 我已经进行了排序并获得了数据功能,因此它看起来并不混乱。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
const int MAX = 30;
void getVariance(int[], int);
bool isPrime(int[], int);
double average(int[], int);
int main()
{
  string inputfilename, outputfilename;
  ifstream infile;
  ofstream outfile;
  int prime, n, sum =0, posnumbers[MAX], countp=0, countn=0\
;
  double variance, stdv, avg=0;


  cout << "Please enter the name of the input file: ";
  cin >> inputfilename;
  infile.open(inputfilename.c_str());
  cout << "Please enter the name of the output file: ";
  cin >> outputfilename;

       ///////////////////////postive ////////////////////////////                            

  outfile.open(outputfilename.c_str());
  if(!infile)
    cout << "file not open for input" << endl;
  else
    {
     prime = isPrime(posnumbers, n);
     outfile << "=======================" << endl << endl;
     outfile << "Positive #'s in the File" << endl;
     for (int i=0; i<n; i++)
         {
           if (posnumbers[i]>=0)
             {
               countp++;
               sum = sum + posnumbers[i];
               outfile << posnumbers[i] << endl;
               if (posnumbers[i] == prime)
                 outfile << posnumbers[i] << endl;
             }
         } 



     outfile << "average " <<  sum/n << endl;
     outfile << "variance " << variance << endl;


///////////////////////// functions/////////////////////                                 



bool isPrime(int posnum[], int n)
 {
   for (int i=2; i<=posnum[n]/2; i++)
     if (posnum[n] % i ==0)
       return false;
     else
       return true;
 }

double average(int posnum[], int n)
{
  double sum = 0.0;
  for (int i=0; i<n; i++)
    {
      sum += posnum[n];
    }
  return sum / n;
}
bool isPrime(int posnum[], int n)
 {
   for (int i=2; i<=posnum[n]/2; i++)
     if (posnum[n] % i ==0)
       return false;
     else
       return true;
 }

这是行不通的。 原因是当数字不可分割时,您立即返回true。 例如,如果posnum[n]为3,那么您的模检查将失败,并且您将立即返回true,而不检查所有其他可能除数的数字。

此外, isPrime当前仅检查一个数字的素数,但这未反映在调用代码中。

prime = isPrime(posnumbers, n);

由于isPrime返回bool ,因此prime现在为0或1。

if (posnumbers[i] == prime)
    outfile << posnumbers[i] << endl;

这意味着该行将仅输出所有为0或1的数字,具体取决于质数的值。 你应该叫isPrime为每一个元素posnumbers代替,如果它返回true打印。

对于isPrime ,请尝试以下操作:

bool isPrime(int posnum[], int n) {
    for (int i = 2; i <= posnum[n] / 2; ++i) {
        if (posnum[n] % i == 0) {
            return false;
        }
    }
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM