トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

No.192 合成数

■■■問題■■■

整数 N が与えられます。(N-100)以上 (N+100)以下の合成数を1個見つけてください。
ここで、合成数とは1と自分自身以外の正の約数を持つ正整数のことをいいます。

■■■入力■■■

N

101 <= N <= 1000

■■■出力■■■

N-100 以上 N+100 以下の合成数を1個出力せよ(前後の空白類は無視される)。
なお、入力の制約を満たす任意のNに対してそのような数が存在することが示せる。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input3";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("101");
            //4
            //1,2,3はいずれも合成数ではありませんが、
            //4は1,4の他に2を約数として持つため合成数です。 
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("1000");
            //1000
            //N自身が合成数である場合、それを出力しても正答となります
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int N = int.Parse(InputList[0]);

        for (int I = N - 100; I <= N + 100; I++) {
            if (IsPrime(I)) continue;
            Console.WriteLine(I);
            break;
        }
    }

    //素数かを判定
    static bool IsPrime(int pTarget)
    {
        for (int I = 2; I * I <= pTarget; I++) {
            if (pTarget % I == 0) return false;
        }
        return true;
    }
}


解説

試し割りで素数か合成数を、順に判定してます。