トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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;
}
}
解説
試し割りで素数か合成数を、順に判定してます。