@Override
	public boolean containsAtLeast(IntSet c, int minElements) {
		if (minElements < 1)
			throw new IllegalArgumentException();
		if ((size >= 0 && size < minElements) || c == null || c.isEmpty() || isEmpty())
			return false;
		if (this == c)
			return size() >= minElements;

		final FastSet other = convert(c);
		final int[] localWords = words; 			// faster
		final int[] localOtherWords = other.words; 	// faster

		int count = 0;
		for (int i = Math.min(firstEmptyWord, other.firstEmptyWord) - 1; i >= 0; i--) {
			count += BitCount.count(localWords[i] & localOtherWords[i]);
			if (count >= minElements)
				return true;
		}
		return false;
	}