AOJ1503 Numbers
問題リンク Numbers
- 解法
「合成数 連続」などで検索すると、次のことが分かります、目からウロコでした。
合成数がN個連続している場所は、
(N+1)!+2, (N+1)!+3, ... , (N+1)!+(N+1)
であるというのです。
(N+1)!は2〜N+1のどれでも割りきれます。なので、上のN個の整数はそれぞれ、
2, 3, ... , N+1
で割りきれるので合成数なわけです。
すっげぇと唸ったところであとは、BigIntegerの力を借りるだけです。
- ソース
import java.math.BigInteger; import java.util.Scanner; //Numbers public class AOJ1503 { void run(){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); BigInteger b = BigInteger.ONE; for(int i=2;i<=n+1;i++)b = b.multiply(BigInteger.valueOf(i)); System.out.println(b.add(BigInteger.valueOf(2))); for(int i=2;i<=n+1;i++)System.out.println(i); } public static void main(String[] args) { new AOJ1503().run(); } }