アルゴリズムのJava実装はブルーブリッジカップ月曜日 - 土曜日素因数を改善します

質問アルゴリズムは、月曜日から土曜日素因数を向上させます

リソースの制約
制限時間: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();

        }


    }
}

リリース1094元の記事 ウォンの賞賛6405 ビュー17万+

おすすめ

転載: blog.csdn.net/a1439775520/article/details/104246136