我刚刚创建了一个非常快速的素数排序方法.如何改进?
I just created an extremely fast way to sort primes. How do I improve it?
基本上,它的工作原理是将一个数字转换为一个字符串,如果它在字符串中找到任何数字,那么它会给foundEven
变量一个正值。奇数也是如此。
(我不明白的一件事是,为什么如果我将">"符号与if (FoundEvenSignedInt < FoundOddSignedInt)
中的"<"切换,它会给你一个奇数的正确结果。
有什么方法可以改进代码吗?里面有什么错误吗?我对C++编程相当陌生。
#include <string>
#include <cstddef>
int IsPrime(long double a)
{
int var;
long double AVar = a;
signed int FoundEvenSignedInt, FoundOddSignedInt;
std::string str = std::to_string(a);
std::size_t foundEven = str.find_last_of("2468");
std::size_t foundOdd = str.find_last_of("3579");
FoundEvenSignedInt = foundEven;
FoundOddSignedInt = foundOdd;
if (FoundEvenSignedInt < FoundOddSignedInt)
{
var = 1;
goto EndOfIsPrimeFunction;
}
if (FoundEvenSignedInt > FoundOddSignedInt)
{
var = 2;
goto EndOfIsPrimeFunction;
}
// This if statement kept giving me this weird warning so I made it like this
if (FoundEvenSignedInt == -1)
{
if (FoundOddSignedInt == -1)
{
if (AVar == 10 || 100 || 1000 || 10000 || 100000 || 1000000)
{
var = 2;
goto EndOfIsPrimeFunction;
}
}
}
EndOfIsPrimeFunction:
return var;
}
以下是一些改进代码的方法。
- 科拉茨猜想是关于整数的。
long double
是浮点数的数据类型。它不适合检查猜想。您需要使用整型数据类型,例如unsigned long long
。如果这没有足够的范围适合您,则需要使用某种 Bignum dat atype。标准 C 库中没有任何,您需要找到第三方库。 - 科拉茨猜想与素数无关。它是关于偶数和奇数的整数。的确,除了 2 之外的所有素数都是奇数,但这一事实对您没有帮助。
- 在C++中回答是/否问题的数据类型为
bool
。按照惯例。对于任何其他数字数据类型,零表示"否",所有其他值表示"是"(从技术上讲,当转换为bool
时,零将转换为false
,其他值将转换为true
,因此您可以执行类似if (a % 2)
的操作。为yes
和no
返回1
和2
的函数是非常规的。 -
检查数字是否为奇数的自然方法是:
bool isOdd (unsigned long long a) { return a % 2; }
它比你的代码快一些(在我的电脑上大约是 400 倍),每次都给出正确的结果,可读性强,并且语句
goto
为零。
而不是if(AVar == 10 || 100 || ...
,你可以说if(!(AVar % 10))
。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 我刚刚创建了一个非常快速的素数排序方法.如何改进?
- 快速排序算法改进,如果更多重复键
- 向量下标超出范围-气泡排序-改进
- 快速排序的改进
- C++ 通过使用旧向量进行预排序来改进向量排序
- 全局排序和每原子变量排序有何不同
- 我还能在哪里改进此合并排序
- c++算法中排序函数是如何工作的,以及如何改进这段代码