Free, tested & ready to use examples : C++ prime number check test primality
AnyExample.com
 
Webanyexample.com
 

C++ function for prime number check (primality test)

abstract 
Prime number is a natural number that has exactly two (distinct) natural number divisors, which are 1 and the prime number itself. Here is a trivial C++ function for prime number test.
compatible 
  • Any modern C++ compiler

To test for primality for number n we need to check if any number from 2 to square root of n divides n.

For a greater speed there is quick-check with 55 precomputed primes and then (if result is still unknown) checking with every odd number from 55-th prime (257) to n/16 (for any number > 256, square root of n less than n/16)

source code: C++
 
bool ae_is_prime(unsigned int n)
{
    static unsigned int primes55[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
    73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,
    181,191,193,197,199,211,223,227,229,233,239,241,251,257};
 
    for(unsigned int i=0;i<55;i++) 
{
        if (n%primes55[i] == 0) 
{
            if (n == primes55[i]) 
{
                return true;
}
            else
{
                return false;
}
}
}
 
    unsigned int maxtest = n>>4;
 
    for(unsigned int i=259; i<maxtest; i+=2)
{
        if (n%i == 0)
{
            return false;
}
}
 
    return true;
}
 

To illustrate function usage, here is a program which outputs first 1000 primes. Note, that there are more efficient ways to do it with Sieve of Eratosthenes, this is just an example.

source code: C++
 
#include <iostream>
using namespace std;
 
// function ae_is_prime (see code above) is pasted here
 
int main() {
    unsigned int i=1, p=1;
 
    while(p <= 1000)
    {
        i++;
        if(ae_is_prime(i)){
            cout << i << "\t";
            if (p++ % 10 == 0)
                cout << endl;
        }
    }
}
 


This program should output following table with first 1000 prime numbers:

2       3       5       7       11      13      17      19      23      29
31      37      41      43      47      53      59      61      67      71
73      79      83      89      97      101     103     107     109     113
127     131     137     139     149     151     157     163     167     173
179     181     191     193     197     199     211     223     227     229
233     239     241     251     257     263     269     271     277     281
283     293     307     311     313     317     331     337     347     349
353     359     367     373     379     383     389     397     401     409
419     421     431     433     439     443     449     457     461     463
467     479     487     491     499     503     509     521     523     541
547     557     563     569     571     577     587     593     599     601
607     613     617     619     631     641     643     647     653     659
661     673     677     683     691     701     709     719     727     733
739     743     751     757     761     769     773     787     797     809
811     821     823     827     829     839     853     857     859     863
877     881     883     887     907     911     919     929     937     941
947     953     967     971     977     983     991     997     1009    1013
1019    1021    1031    1033    1039    1049    1051    1061    1063    1069
1087    1091    1093    1097    1103    1109    1117    1123    1129    1151
1153    1163    1171    1181    1187    1193    1201    1213    1217    1223
1229    1231    1237    1249    1259    1277    1279    1283    1289    1291
1297    1301    1303    1307    1319    1321    1327    1361    1367    1373
1381    1399    1409    1423    1427    1429    1433    1439    1447    1451
1453    1459    1471    1481    1483    1487    1489    1493    1499    1511
1523    1531    1543    1549    1553    1559    1567    1571    1579    1583
1597    1601    1607    1609    1613    1619    1621    1627    1637    1657
1663    1667    1669    1693    1697    1699    1709    1721    1723    1733
1741    1747    1753    1759    1777    1783    1787    1789    1801    1811
1823    1831    1847    1861    1867    1871    1873    1877    1879    1889
1901    1907    1913    1931    1933    1949    1951    1973    1979    1987
1993    1997    1999    2003    2011    2017    2027    2029    2039    2053
2063    2069    2081    2083    2087    2089    2099    2111    2113    2129
2131    2137    2141    2143    2153    2161    2179    2203    2207    2213
2221    2237    2239    2243    2251    2267    2269    2273    2281    2287
2293    2297    2309    2311    2333    2339    2341    2347    2351    2357
2371    2377    2381    2383    2389    2393    2399    2411    2417    2423
2437    2441    2447    2459    2467    2473    2477    2503    2521    2531
2539    2543    2549    2551    2557    2579    2591    2593    2609    2617
2621    2633    2647    2657    2659    2663    2671    2677    2683    2687
2689    2693    2699    2707    2711    2713    2719    2729    2731    2741
2749    2753    2767    2777    2789    2791    2797    2801    2803    2819
2833    2837    2843    2851    2857    2861    2879    2887    2897    2903
2909    2917    2927    2939    2953    2957    2963    2969    2971    2999
3001    3011    3019    3023    3037    3041    3049    3061    3067    3079
3083    3089    3109    3119    3121    3137    3163    3167    3169    3181
3187    3191    3203    3209    3217    3221    3229    3251    3253    3257
3259    3271    3299    3301    3307    3313    3319    3323    3329    3331
3343    3347    3359    3361    3371    3373    3389    3391    3407    3413
3433    3449    3457    3461    3463    3467    3469    3491    3499    3511
3517    3527    3529    3533    3539    3541    3547    3557    3559    3571
3581    3583    3593    3607    3613    3617    3623    3631    3637    3643
3659    3671    3673    3677    3691    3697    3701    3709    3719    3727
3733    3739    3761    3767    3769    3779    3793    3797    3803    3821
3823    3833    3847    3851    3853    3863    3877    3881    3889    3907
3911    3917    3919    3923    3929    3931    3943    3947    3967    3989
4001    4003    4007    4013    4019    4021    4027    4049    4051    4057
4073    4079    4091    4093    4099    4111    4127    4129    4133    4139
4153    4157    4159    4177    4201    4211    4217    4219    4229    4231
4241    4243    4253    4259    4261    4271    4273    4283    4289    4297
4327    4337    4339    4349    4357    4363    4373    4391    4397    4409
4421    4423    4441    4447    4451    4457    4463    4481    4483    4493
4507    4513    4517    4519    4523    4547    4549    4561    4567    4583
4591    4597    4603    4621    4637    4639    4643    4649    4651    4657
4663    4673    4679    4691    4703    4721    4723    4729    4733    4751
4759    4783    4787    4789    4793    4799    4801    4813    4817    4831
4861    4871    4877    4889    4903    4909    4919    4931    4933    4937
4943    4951    4957    4967    4969    4973    4987    4993    4999    5003
5009    5011    5021    5023    5039    5051    5059    5077    5081    5087
5099    5101    5107    5113    5119    5147    5153    5167    5171    5179
5189    5197    5209    5227    5231    5233    5237    5261    5273    5279
5281    5297    5303    5309    5323    5333    5347    5351    5381    5387
5393    5399    5407    5413    5417    5419    5431    5437    5441    5443
5449    5471    5477    5479    5483    5501    5503    5507    5519    5521
5527    5531    5557    5563    5569    5573    5581    5591    5623    5639
5641    5647    5651    5653    5657    5659    5669    5683    5689    5693
5701    5711    5717    5737    5741    5743    5749    5779    5783    5791
5801    5807    5813    5821    5827    5839    5843    5849    5851    5857
5861    5867    5869    5879    5881    5897    5903    5923    5927    5939
5953    5981    5987    6007    6011    6029    6037    6043    6047    6053
6067    6073    6079    6089    6091    6101    6113    6121    6131    6133
6143    6151    6163    6173    6197    6199    6203    6211    6217    6221
6229    6247    6257    6263    6269    6271    6277    6287    6299    6301
6311    6317    6323    6329    6337    6343    6353    6359    6361    6367
6373    6379    6389    6397    6421    6427    6449    6451    6469    6473
6481    6491    6521    6529    6547    6551    6553    6563    6569    6571
6577    6581    6599    6607    6619    6637    6653    6659    6661    6673
6679    6689    6691    6701    6703    6709    6719    6733    6737    6761
6763    6779    6781    6791    6793    6803    6823    6827    6829    6833
6841    6857    6863    6869    6871    6883    6899    6907    6911    6917
6947    6949    6959    6961    6967    6971    6977    6983    6991    6997
7001    7013    7019    7027    7039    7043    7057    7069    7079    7103
7109    7121    7127    7129    7151    7159    7177    7187    7193    7207
7211    7213    7219    7229    7237    7243    7247    7253    7283    7297
7307    7309    7321    7331    7333    7349    7351    7369    7393    7411
7417    7433    7451    7457    7459    7477    7481    7487    7489    7499
7507    7517    7523    7529    7537    7541    7547    7549    7559    7561
7573    7577    7583    7589    7591    7603    7607    7621    7639    7643
7649    7669    7673    7681    7687    7691    7699    7703    7717    7723
7727    7741    7753    7757    7759    7789    7793    7817    7823    7829
7841    7853    7867    7873    7877    7879    7883    7901    7907    7919

warning 
  • function ae_is_prime use unsigned int type and cannot operate on numbers outside unsigned int interval (which is usually 0..232 for 32-bit platforms and 0..264 for 64 bit platform/compiler)
tested by AnyExample.com on 2006-07-31
  • Windows XP :: Microsoft Visual C++ 2003
  • Free BSD 5.2 :: gcc 3.3.3
 


 
© AnyExample 2007
License | Privacy | Contact