remove --help --version, etc
[platform/upstream/coreutils.git] / src / wheel-gen.pl
1 #!/usr/bin/perl -w
2 # -*- perl -*-
3
4 eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
5     if 0;
6
7 use strict;
8 (my $program_name = $0) =~ s|.*/||;
9
10 sub END
11 {
12   use POSIX qw (_exit);
13   # This is required if the code might send any output to stdout
14   # E.g., even --version or --help.  So it's best to do it unconditionally.
15   close STDOUT
16     or (warn "$program_name: closing standard output: $!\n"), _exit (1);
17 }
18
19 sub is_prime ($)
20 {
21   my ($n0) = @_;
22   use integer;
23
24   $n0 == 2
25     and return 1;
26
27   my $n = $n0;
28   my $d = 2;
29   my $w = 1;
30   my $q;
31   while (1)
32     {
33       $q = $n / $d;
34       #print "q=$q n=$n d=$d\n";
35       ($n == $q * $d)
36         and return 0;
37       $d += $w;
38       $q < $d
39         and last;
40       $w = 2;
41     }
42   return 1;
43 }
44
45 {
46   my $wheel_size = $ARGV[0];
47
48   my @primes = (2);
49   my $product = $primes[0];
50   my $n_primes = 1;
51   for (my $i = 3; ; $i += 2)
52     {
53       if (is_prime $i)
54         {
55           push @primes, $i;
56           $product *= $i;
57           ++$n_primes == $wheel_size
58             and last;
59         }
60     }
61
62   my @increments;
63   my $prev = 2;
64   for (my $i = 3; ; $i += 2)
65     {
66       my $rel_prime = 1;
67       foreach my $divisor (@primes)
68         {
69           $i != $divisor && $i % $divisor == 0
70             and $rel_prime = 0;
71         }
72
73       if ($rel_prime)
74         {
75           #warn $i, ' ', $i - $prev, "\n";
76           push @increments, $i - $prev;
77           $prev = $i;
78
79           $product + 1 < $i
80             and last;
81         }
82     }
83
84   print "@increments\n";
85
86   exit 0;
87 }