fork(1) download
  1. #include <stdint.h>
  2. #include <stdlib.h>
  3.  
  4. static int randto(int n) {
  5. int r;
  6. int maxrand = (RAND_MAX / n) * n;
  7. do r = rand(); while (r >= maxrand);
  8. return r % n;
  9. }
  10.  
  11. static void shuffle(unsigned *x, size_t n) {
  12. while (--n) {
  13. size_t j = randto(n + 1);
  14. unsigned tmp = x[n];
  15. x[n] = x[j];
  16. x[j] = tmp;
  17. }
  18. }
  19.  
  20. uint16_t nrand16(int n) {
  21. uint16_t v = 0;
  22. static unsigned pos[16] = {0, 1, 2, 3, 4, 5, 6, 7,
  23. 8, 9, 10, 11, 12, 13, 14, 15};
  24. shuffle(pos, 16);
  25. while (n--) v |= (1U << pos[n]);
  26. return v;
  27. }
  28.  
  29. uint32_t nrand32(int n) {
  30. uint32_t v = 0;
  31. static unsigned pos[32] = { 0, 1, 2, 3, 4, 5, 6, 7,
  32. 8, 9, 10, 11, 12, 13, 14, 15,
  33. 16, 17, 18, 19, 20, 21, 22, 23,
  34. 24, 25, 26, 27, 28, 29, 30, 31};
  35. shuffle(pos, 32);
  36. while (n--) v |= (1U << pos[n]);
  37. return v;
  38. }
  39.  
  40. #define TEST
  41. #ifdef TEST
  42. #include <stdio.h>
  43. #include <time.h>
  44.  
  45. int main(void) {
  46. srand(time(0));
  47. for (int k = 0; k < 17; k++) printf("%04X %04X\n", nrand16(k), nrand16(k));
  48. for (int k = 0; k < 33; k++) printf("%08X %08X\n", nrand32(k), nrand32(k));
  49. }
  50. #endif
Success #stdin #stdout 0s 1788KB
stdin
Standard input is empty
stdout
0000 0000
0400 0080
1010 0102
0111 0098
5802 800B
6046 6884
5AC0 5464
6847 6B42
BC15 0B8F
F14D D749
0FF9 E6E6
7EC7 BBB6
EFEC FC77
FD77 FEBB
D7FF FFDE
FFF7 BFFF
FFFF FFFF
00000000 00000000
00100000 00000040
00800400 0000000A
02102000 00000058
00010C20 10400088
040C8010 104C0010
00881203 01101803
64104900 48099020
04544160 00223C88
62181340 19266800
16921098 805E1805
380A2A49 20687186
0BC01A47 3E21A182
CA834670 469866B0
E55B4209 AA42A1B9
3EDC8858 9921594F
CE06E695 2013F5DB
FC6B0996 0EDFA58C
E8D35F1C 3B720ABF
4DF54FB8 BE18F6AE
7377D2C7 5E3F26CF
24BFB7DB B8FCF72D
25FBFDB6 F6ED5D4F
197FF5FD 7D73A7DF
FDFF49F9 EEE57BF7
F9BEFBFA FB37DFAF
FFFF1F5E F9E7FFF5
EF3FEFDF 3F76FFFF
EFFFDFBB 7FFFEF5F
FFBFFBF7 BFFFEFBF
BFFBFFFF FFFFF6FF
FFFFFFFB EFFFFFFF
FFFFFFFF FFFFFFFF