程序中止-从文件中读取的数字的素数

Program aborts - Prime factor of numbers read from a file

本文关键字:数字 读取 文件 程序      更新时间:2023-10-16

此代码将数字分解为素数。

这些数字取自一个文件。文件中的第一个数字表示文件中元素的数量,这些数字来自区间[1,10^18]。

代码的问题是,在读取和分解一些数字后,它会停止。它旨在分解100到1000之间的数字,其中至少有一半大于10^9。

我怀疑堆栈溢出,但我不能100%确定。为了解决这个内存分配问题,我想听听一些建议。非常感谢。

#include <iostream>
#include <stdio.h>
using namespace std;
void print_recurenta(int a,int i)
{
    if((a==1)||(i>a))
        return;
    if(a%i==0)
    {
        printf("%d  ",i);
        a=a/i;
        print_recurenta(a,i);
    }
    else
    {
        i++;
        print_recurenta(a,i);
    }
}
void factor_printf(int nr)
{
    printf("n%ld  ",nr);
    int i=2;
    print_recurenta(nr,i);
}

int main()
{
    int numere;
    int  nr=0;
    FILE* f=fopen("input.txt","r");
    if(f==0)
        return -1;
    fscanf(f,"%d",&numere);
    while(fscanf(f,"%d",&nr)!=EOF)
    {
        fscanf(f,"%d",&nr);
        factor_printf(nr);
    }
    return 0;
}

如果我们在循环中寻找下一个因素,这个问题CAN可以递归解决:

void print_recurenta(__int64 a, __int64 i)
{
    if (a == 1)
        return;
    if (i*i > a)
    {
        printf("%llu  ", a);
        return;
    }
    if (a%i == 0)
    {
        printf("%llu  ", i);
        a = a / i;
    }
    else
    {
        for (++i; i*i < a && (a%i != 0); ++i)
            ;
    }
    print_recurenta(a, i);
}