質問アルゴリズムは、月曜日から土曜日素因数を向上させます
リソースの制約
制限時間:1.0秒メモリ制限:256.0メガバイト
問題の説明
。これは、数論と関連トピックの簡単な質問ですが、それは「正の整数のすべての素因数を求めている」しているように見えるが、実際には完全に真実ではありません。
この問題では、次の概念を定義する必要があります:
1。月曜日から土曜日の数
Nの整数正のため、それは1又は6である場合にNフォームに7K + {1,6} =ように、それは書き込むことができ7で割った余り。もっと画像、我々は省略し、そのようなN「月曜土曜数」、と呼ばれている「MS数。」
2。月曜日から土曜日の因子
場合、2つの数値、bについてMS、MS数xは、存在する場合、その結果AX = B、次いでB、略記「月曜日から土曜日の因子」と呼ばれている「MS因子。」
3。月曜日-土曜日素数
MSの数のため、> 1を満たしていないし、ほかにとMSは、他の要因、それは省略し、「月曜日-土曜日素数」と呼ばれる1、あれば「MS素数。」
注:それはMSの数である場合には、伝統的な意味での素数のために、MSは、それが素数でなければなりません。しかし、逆にそれがMS素数ではなく、伝統的な意味で素数である、など27のように、設定する必要はありません。
4。月曜日-土曜日素因数は
二つの数字、B、BのMSは、因子MSがMSと素数であるとき、それはB、Aと呼ばれて満足している場合は、「月曜日-土曜日素因数。」
例:MS 27の品質係数は216(27×8 = 216)です。
問題はMS Nの数を考えると、そのすべての月曜日-土曜日素因数を見つける、ということです。
入力形式
の行を複数備え、各入力データは、各行整数N(Nは、MSの数、1 <N <300000を保証しなければなりません)。
入力の最後の行が1の整数である(この行のために、あなたは、任意の情報の出力を持っていません)。
各入力データが100を超えてはなりません。
出力形式
N出力ラインのそれぞれに対して、月曜日から土曜日は、出力の昇順に、Nのすべての素因数を表します。:「PK ...... P1 P2 P3 N形を持っている 」、 ラインの余分なスペース終了することに注意してください。
[サンプル入力]
205920
262144
262200
279 936
299 998
1
出力例] [
205920:68131520225599
262144:8
262200:6,815,205,057,697,692,190 2185 874 575 230 475
279 936:27 8 6
299 998:299 998
データサイズと表記
1 <N <300 000、各入力データは100を超えません。
package com.company;
import java.util.ArrayList;
import java.util.Scanner;
public class Monday_Saturday质因子 {
public static boolean [] Not_MS_Num = new boolean[300005];
public static ArrayList<Integer> MS_Num = new ArrayList<>();
public static int N;
public static void main(String[] args) {
//先把所有的MS数都循环出来
for (int i = 6; i <= 300000; )
{
if (Not_MS_Num[i] == false)
{
MS_Num.add(i);
for (int k = 6; k * i <= 300000; )
{
Not_MS_Num[k * i] = true;
if (k % 7 == 6)
k += 2;
else
k += 5;
}
}
if (i % 7 == 6)
i += 2;
else
i += 5;
}
Scanner sc = new Scanner(System.in);
//这里直接输入数进行判断
N=sc.nextInt();
while (N > 1)
{
System.out.print(N+":");
for (int i = 0; i < MS_Num.size() && MS_Num.get(i) <= N; ++i)
{
if (N % MS_Num.get(i) == 0)
System.out.print(" "+MS_Num.get(i));
}
N=sc.nextInt();
System.out.println();
}
}
}