Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 素因子误差的计算_C_Variables_Prime Factoring - Fatal编程技术网

C 素因子误差的计算

C 素因子误差的计算,c,variables,prime-factoring,C,Variables,Prime Factoring,这不是一个复制线程,因为我不是在问如何计算一个数的素数因子。我有一个问题,在代码和任何线程标题的建议是欢迎的 所以我的代码适用于高达数十亿的数字。但是,即使我使用long(64位),而不是在经过一段时间的计算后给出素数因子,我的代码也会立即工作(当我给它一个巨大的数字时),并且它说找不到素数因子。(你可以运行代码来看看我在说什么) 编辑:我使用的是32位变量,这就是问题所在。我从long变为long。现在它可以工作了,但是对于大的输入来说速度非常慢 edit2:我在一个数组中保留了素数因子,它有

这不是一个复制线程,因为我不是在问如何计算一个数的素数因子。我有一个问题,在代码和任何线程标题的建议是欢迎的

所以我的代码适用于高达数十亿的数字。但是,即使我使用long(64位),而不是在经过一段时间的计算后给出素数因子,我的代码也会立即工作(当我给它一个巨大的数字时),并且它说找不到素数因子。(你可以运行代码来看看我在说什么)

编辑:我使用的是32位变量,这就是问题所在。我从long变为long。现在它可以工作了,但是对于大的输入来说速度非常慢

edit2:我在一个数组中保留了素数因子,它有一个非常长的时间来处理大的数字(50亿以上)。当我停止使用数组并简单地打印结果时,我的工作速度要快得多。如果你测试你的电脑,你的工作速度仍然很慢。无论您的增长顺序有多好,如果您输入足够大的输入,您都会消耗cpu。这是一个很好的例子,展示了微小的C(op)如何影响巨大的C(n)值的算法

edit3:这个算法不适用于素数

#include <stdio.h>

int main(void) {

long long number, halfTheNumber, arrayCounter = 0, primeNumberCounter = 2;
long long array1[100] = {0};

printf("Enter number to find its prime factors: ");
scanf("%llu", &number);

halfTheNumber = number / 2;
for(; primeNumberCounter <= halfTheNumber; primeNumberCounter++)
{
    while(number % primeNumberCounter == 0 && number > 1)
    {
        number /= primeNumberCounter;
        array1[arrayCounter] = primeNumberCounter;
        arrayCounter++;
    }
}

for(arrayCounter = 0; arrayCounter <= 99; arrayCounter++)
{
    printf("\n%lu. prime factor: %llu", arrayCounter, array1[arrayCounter]);
}

getchar();
return 0;
}
#包括
内部主(空){
长-长数字,半数字,数组计数器=0,素数计数器=2;
长数组1[100]={0};
printf(“输入数字以查找其素数:”);
scanf(“%llu”、&number);
半数字=数字/2;
对于(;素数计数器1)
{
数字/=素数计数器;
array1[arrayCounter]=素数计数器;
arrayCounter++;
}
}

对于(arrayCounter=0;arrayCounter您的系统中long的大小是多少?您提供了什么输入?@GoodDects 64位。所以-9223372036854775808到-9223372036854775807。我提供了不同的输入。小数字可以工作。但是当我超过数十亿时,它就开始不工作了。您能给出一个带有输出的示例输入吗?什么时候如果你还没有用调试器逐行地检查代码,你真的应该学习这样做,因为这几乎是每个程序员都需要的知识。在32位代码中,
long
总是32位的。在64位代码中,这取决于你是否在使用Windows或Linux。在Windows上,
long
仍然是32位。在Linux上,
long
是64位。如果要保证64位类型,请使用
long-long
。或者更好的做法是,包括
stdint.h
并使用
int64\t