是否有像“int”或“float”这样的函数,但对于质数?

Is there a function like "int" or "float" but for prime numbers?

提问人:Understanding 提问时间:2/7/2016 最后编辑:Understanding 更新时间:2/8/2016 访问量:950

问:

这个问题可能不清楚,我要问和搜索的是:在 C++ 编程中,人们用命令引入了变量的类型

  • int,表示整数
  • bool, 表示布尔值

等等..

我想知道是否有类似的方法来定义“素数”,例如

素数 N;

因此,当他的程序将调用 $n$ 时,它会自动只取质数。

使用简单程序的应用程序:假设我想创建一个操作的整数部分列表

π^n

其中 π = Pi,n = 质数。 从数学上讲,这将是

地板[π^n]

不,我现在如何编写一个程序来列出一些质数,例如:

    int main () 
{
    for (int i=2; i<100; i++) 
    {
        bool prime=true;
        for (int j=2; j*j<=i; j++)
        {
            if (i % j == 0) 
            {
                prime=false;
                break;    
            }
        }   
        if(prime) cout << i << " ";
    }
    return 0;
}

但我不太确定如何继续.另外,我很抱歉我表达我想做的事情的方式很糟糕!

C++ 素数

评论

1赞 David Schwartz 2/7/2016
这是 C 问题还是 C++ 问题?还是专门针对 C++11?您的标签发生冲突。
0赞 Martin James 2/7/2016
将支持哪些操作?我猜乘法出来了吗?
5赞 Mats Petersson 2/7/2016
您确实知道知道某物是否是素数(对于大数)在计算上是相当困难的,对吧?
1赞 Kerrek SB 2/7/2016
C 和 C++ 标准都没有指定这样的类型。您可以在 C++ 中编写自己的用户定义类型,该类型具有您查找的属性,但它可能需要动态执行;我不知道有任何硬件具有内置的素数概念。
1赞 Mats Petersson 2/7/2016
假设 N 的合理大小,我会说最好通过使用您希望使用的 N 值对数组进行硬编码来完成。这并不是说前一百万个质数很难以一种可以很容易地添加到你的程序中的形式获得。

答:

-1赞 G33K_C0D3R 2/7/2016 #1

不,我的朋友,无论你问什么,都没有任何选择。
但是有一些方法可以做到这一点:
首先,使用 Structure、Union、Typedef 这些用于在 c lang 中创建数据类型


否则,其次,创建一个函数 prime() 并添加到库中,每当您想要包含该头文件时,然后使用该 fxn 将用户定义函数添加到库(使用 tlib.exe-TurboLibrarian):- 信息:-in cmd- tlib math.lib + c:\prime.obj (注意:使用“-”从库中删除 fxn

如何使用:
#include< math.h> .
.......................

........................
素数(n)
等等等等
........................
通过这种方式,您可以非常快速地检查素数 no 并将它们添加到数组中,然后您将得到一个仅包含素数 no 的数组(与接受素数的数据类型相同)

很酷不是吗?

1赞 Ilan Kutsman 2/7/2016 #2

关于所有提到的语言标签的答案是否定的。

素数包含在 int 中,因为所有素数都是整数。

要找出整数是否也是质数,需要在函数中实现算法。

假设存在 prime 类型,并且您使用 vulue 4 初始化它,这不是 prime...编译器应该说类型不匹配之类的内容,并且不允许你运行程序。 到目前为止听起来很简单,但是当有一个非常大的数字时会发生什么。它必须应用一种算法,这意味着它不再是编译器的问题。

0赞 Lars Fischer 2/8/2016 #3

有一些专门的语言和库。例如,Pari/Gp 有一个很好的解释器,具有许多与 Prime 相关的函数(解释器调用 C 库,所以它的速度很快): 例如

primes(100)

为您提供前 100 个素数的向量。甚至还有一个原始性测试。它真的很好,很容易开始玩。当你对重代数数论感兴趣时,这也是可能的。您的示例:isprime

P = precision(Pi, 1000)
vector(100, i, floor((P^prime(i))))

第一行创建具有足够高的求幂精度的 PI,第二行创建一个列表,其中包含 floor (Pi^p) 的计算,其中 p 的范围超过前 100 个素数。

有一个程序可以使用底层库将您的高级 gp 解释器脚本转换为可编译的 C 程序。当你需要更快的速度时,你可以使用它,但首先:使用gp Interpreter。gp2c

There are other packages as well, I would also recommend SAGE. It is an Open Source alternative to Maple and Mathematica. SAGE uses Python as its scripting language, here you would use:

for p in primes_first_n(100): print p

[ floor( pi^p ) for p in primes_first_n(100) ]

You can try it out by creating an account for the online version of SAGE