PHP,111 68 66
$a=date(Y)+543;for($i=2;$i<$a;)$b+=$a%$i?!++$i:!!$a/=$i;echo$b==9;
直接计算素数。
$a=date(Y)+543; // current year
for($i=2;$i<$a;) // while $i lower than the year
$b+=$a%$i?!++$i:!!$a/=$i; // if $i divides $a: $a/=$i and ++$b | if not: ++$i
echo$b==9; // output if it has 10 prime factors
旧思路:111 90
for($i=1;++$i<1e3;)for($j=1;++$j<1e3;)${$i*$j}=($$i?:1)+($$j?:1);echo${date('Y')+543}==10;
它不使用内置的素数分解法,而是使用基本的素数筛子来获得小于10000的素数。这映射到PHP使用date('Y')
以下方法提供的4位数字:
for($i=1;++$i<1e3;) // for each number smaller sqrt(1e4)
for($j=1;++$j<1e3;) // do sqrt(1e4) times
${$i*$j}=($$i?:1)+($$j?:1); // n_factors[i*j] = n_factors[i] + n_factors[j]
echo${date('Y')+543}==10; // output 1 if the current year has 10 prime factors or nothing if it doesn't