集合の話おまけ

なんだか、プログラムを書いちゃった。
たとえば、「1から100までの整数で2と3で割り切れ、5で割り切れないもの」を
出力するなら、
 
>syugo.exe 1 100 / 2 3 ! 5
 
のように入力すると、


1 : 6
2 : 12
3 : 18
4 : 24
5 : 36
6 : 42
7 : 48
8 : 54
9 : 66
10 : 72
11 : 78
12 : 84
13 : 96
のように出力するもの。

#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;

int main(int argc, char *args[])
{
if(argc <= 4) return 0;
if(strcmp(args[3], "/") != 0) return 0;

int num = 1;
for(int i = atoi(args[1]); i <= atoi(args[2]); ++i) {
int j = 4;
for(; j < argc; ++j) {
if(strcmp(args[j], "!") == 0) break;
if(i % atoi(args[j]) != 0) break;
}
if(j < argc && strcmp(args[j], "!") == 0) {
++j;
for(;j < argc; ++j) {
if(i % atoi(args[j]) == 0) break;
}
}
if(j == argc) {
cout << setw(7) << num++ << " : " << setw(7) << i << endl;
}
}
}

たとえば、「1000〜2000で、2と3と17で割り切れるけど、16と5と7では
割り切れないもの」を出力するなら、
 
>syugo 1000 2000 / 2 3 17 ! 16 5 7
とすると、

1 : 1122
2 : 1224
3 : 1326
4 : 1734
5 : 1836
6 : 1938
なんてなる。
エラー処理は(ほとんど)してないし、保証は何もしませんが、
遊びたい方は、(コンパイルしてから)どうぞ。