此代码将数字分解为其主要因子。
数字来自文件。文件中的第一个数字表示其中的元素数量,数字来自区间[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;
}
答案 0 :(得分: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);
}