C 素因子误差的计算
这不是一个复制线程,因为我不是在问如何计算一个数的素数因子。我有一个问题,在代码和任何线程标题的建议是欢迎的 所以我的代码适用于高达数十亿的数字。但是,即使我使用long(64位),而不是在经过一段时间的计算后给出素数因子,我的代码也会立即工作(当我给它一个巨大的数字时),并且它说找不到素数因子。(你可以运行代码来看看我在说什么) 编辑:我使用的是32位变量,这就是问题所在。我从long变为long。现在它可以工作了,但是对于大的输入来说速度非常慢 edit2:我在一个数组中保留了素数因子,它有一个非常长的时间来处理大的数字(50亿以上)。当我停止使用数组并简单地打印结果时,我的工作速度要快得多。如果你测试你的电脑,你的工作速度仍然很慢。无论您的增长顺序有多好,如果您输入足够大的输入,您都会消耗cpu。这是一个很好的例子,展示了微小的C(op)如何影响巨大的C(n)值的算法 edit3:这个算法不适用于素数C 素因子误差的计算,c,variables,prime-factoring,C,Variables,Prime Factoring,这不是一个复制线程,因为我不是在问如何计算一个数的素数因子。我有一个问题,在代码和任何线程标题的建议是欢迎的 所以我的代码适用于高达数十亿的数字。但是,即使我使用long(64位),而不是在经过一段时间的计算后给出素数因子,我的代码也会立即工作(当我给它一个巨大的数字时),并且它说找不到素数因子。(你可以运行代码来看看我在说什么) 编辑:我使用的是32位变量,这就是问题所在。我从long变为long。现在它可以工作了,但是对于大的输入来说速度非常慢 edit2:我在一个数组中保留了素数因子,它有
#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
。