Free, tested & ready to use examples!
AnyExample.com
 
Web anyexample.com
 


AnyFormat.io - convert files and webpages to any format!

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 
  • Windows XP :: Microsoft Visual C++ 2003
  • Free BSD 5.2 :: gcc 3.3.3
  •  


     
    © AnyExample 2010-2013
    License | Privacy | Contact