判断完美数
import java.util.HashSet;
public class s05 {
public static void main(String[] args) {
boolean b = Solution.checkPerfectNumber(28);
System.out.println(b);
}
}
class Solution {
public static boolean checkPerfectNumber(int num) {
if (num < 4) return false;
int sum = 0;
HashSet<Integer> set = new HashSet<>();
for (int i = 1; i <= num - 1; i++) {
if ((num % i) == 0 && !set.contains(i) && !set.contains(num / i)) {
set.add(i);
set.add(num / i);
sum += i;
sum += num / i;
}
}
sum -= num;
return sum == num;
}
}
多线程打印0和奇偶数
package ckwd.ps;
import java.util.concurrent.Semaphore;
import java.util.function.IntConsumer;
public class MultiThreadOddEvenZeroTest01 {
}
class ZeroOddEvenTest {
public static void main(String[] args) {
ZeroEvenOdd zeroEvenOdd = new ZeroEvenOdd(21);
new Thread(() -> {
try {
zeroEvenOdd.zero(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
zeroEvenOdd.even(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
try {
zeroEvenOdd.odd(System.out::print);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
class ZeroEvenOdd {
private int n;
private Semaphore zero = new Semaphore(1);
private Semaphore even = new Semaphore(0);
private Semaphore odd = new Semaphore(0);
public ZeroEvenOdd(int n) {
this.n = n;
}
public void zero(IntConsumer printNumber) throws InterruptedException {
for (int i = 1; i <= n; i++) {
zero.acquire();
printNumber.accept(0);
if (i % 2 == 1) {
odd.release();
} else {
even.release();
}
}
}
public void even(IntConsumer printNumber) throws InterruptedException {
for (int i = 2; i <= n; i += 2) {
even.acquire();
printNumber.accept(i);
zero.release();
}
}
public void odd(IntConsumer printNumber) throws InterruptedException {
for (int i = 1; i <= n; i += 2) {
odd.acquire();
printNumber.accept(i);
zero.release();
}
}
}