Сформировать множество по формуле и его подмножество - C#
Формулировка задачи:
Даны три множества Х1, Х2, Х3, содержащие целые числа из диапазона 1..100. Известно, что мощность каждого из этих множеств равна 10.
Сформировать новое множество Y=(Х1 Х2) (Х2\ Х3), из которого выделить подмножество нечетных чисел. На экран вывести исходные и полученное множества. Значения элементов исходных множеств ввести с клавиатуры.
y=(X1объединениеX2)(X2\X3)
Решение задачи: «Сформировать множество по формуле и его подмножество»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
namespace Ghost
{
class Program
{
static bool IsPrime(uint num)
{
if (num == 0 || num == 1)
{
return false;
}
for (uint i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
return false;
}
}
return true;
}
static void Shuffle<T>(IList<T> collection)
{
Random rnd = new Random();
for (int i = 0; i < collection.Count / 2; i++)
{
int index = rnd.Next(0, collection.Count);
if (index != i)
{
T buffer = collection[i];
collection[i] = collection[index];
collection[index] = buffer;
}
}
}
static void Main(string[] args)
{
List<uint> nums = Enumerable.Range(0, 100).Select(Convert.ToUInt32).ToList();
Shuffle(nums);
ISet<uint> x1 = new HashSet<uint>(nums.Take(10));
Shuffle(nums);
ISet<uint> x2 = new HashSet<uint>(nums.Take(10));
Shuffle(nums);
ISet<uint> x3 = new HashSet<uint>(nums.Take(10));
HashSet<uint> result = new HashSet<uint>(x1);
// (X1 U X2)
result.UnionWith(x2);
ISet<uint> temp = new HashSet<uint>(x2);
// (X2 \ X3)
temp.ExceptWith(x3);
// (X1 U X2)(X2 \ X3)
result.IntersectWith(temp);
// Оставить только простые
result.RemoveWhere(x => !IsPrime(x));
Console.WriteLine("X1:");
Console.WriteLine(string.Join(", ", x1));
Console.WriteLine("X2:");
Console.WriteLine(string.Join(", ", x2));
Console.WriteLine("X3:");
Console.WriteLine(string.Join(", ", x3));
Console.WriteLine(@"(X1 U X2)(X2 \ X3):");
Console.WriteLine(string.Join(", ", result));
}
}
}