问题描述
我正在编写用于数字的素因式分解的代码,但是遇到进程以状态-1073741510 终止的程序,我无法运行我的程序,我是计算机科学的新手。请在下面找到我的代码:
PrimeFactorize函数
int primeFactorize(int n) {
if (isPrime(n)) {
cout<<n;
}
for(int i = 2; i < sqrt(n); i++) {
if(!isPrime(i))
continue;
while(n % i == 0) {
cout<<i;
n /= i;
}
}
}
isPrimeMethod
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for(int i = 2; i <= sqrt(n); i++) {
if (n % i == 0)
return false;
}
return true;
}
主要方法
int main() {
cout<<primeFactorize(100);
return 0;
}
解决方法
您的功能
int primeFactorize(int n);
不返回任何内容。因此,这句话
cout<<primeFactorize(100);
调用未定义的行为。
您应该通过以下方式更改函数声明
std::vector<int> primeFactorize(int n);
在函数中,而不是输出质数,应在向量中传递它们。例如
for(int i = 2; i < sqrt(n); i++) {
if( isPrime(i)) {
while(n % i == 0) {
v.push_back( i );
n /= i;
}
}
}
该函数必须返回向量。
主要可以输出获得的向量。
,在您的代码中,特别是函数:int primeFactorize(int n)
在体内不返回什么。会调用未定义行为。
需要返回某种排序的int
值。返回 value 的函数称为 value-returning函数。
在使用数据类型时,例如int
,double
,bool
,它们都需要结束返回各自的数据输入回到调用该函数的语句。
特别是对于您的代码,它甚至不应该具有返回值的功能。相反,它应该仅使用void
。 void
很简单,不会返回一个值。
更改此片段:
int primeFactorize(int n)
收件人:
void primeFactorize(int n)
应该解决您的问题。
,您会感到困惑,这些函数会返回某些内容(例如isPrime
),而某些函数会输出一些内容却什么都不返回(例如primeFactorize
)。打印与返回不同。您可以说primeFactorize
不返回任何内容,因为其中没有return ...;
语句。
不返回任何内容的函数应这样声明void
void primeFactorize(int n)
{
...
}
然后应该更改main
,以便不要尝试打印primeFactorize
的返回值(不再存在)。
int main()
{
primeFactorize(100);
return 0;
}