zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯 算法提高 Monday-Saturday质因子

    试题 算法提高 Monday-Saturday质因子

    资源限制
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      这个问题是个简单的与数论有关的题目,看起来似乎是“求正整数的所有质因子”,但实际上并不完全是这样。

    本题中需要定义以下几个概念:
      1. Monday-Saturday数
      对于一个正整数N,如果它除以7得到的余数是1或6,则可以写成N=7k+{1,6}的形式。更形象的,我们把这样的N称作“Monday-Saturday数”,简称“MS数”。
      2. Monday-Saturday因子
      如果对于两个MS数a,b,若存在一个MS数x,使得ax=b,那么就称a是b的一个“Monday-Saturday因子”,简称“MS因子”。
      3. Monday-Saturday质数
      如果对于MS数a,满足a>1且除了1和a之外a没有其他的MS因子,那么称a是一个“Monday-Saturday质数”,简称“MS质数”。
      注:对于传统意义上的质数,若它是一个MS数,则它一定是一个MS质数。但反之不必成立,例如27,它是一个MS质数但不是传统意义上的质数。
      4. Monday-Saturday质因子
      如果对于两个MS数a,b,若满足a是b的MS因子且a是一个MS质数,那么称a是b的一个“Monday-Saturday质因子”。
      例如:27是216的一个MS质因子(216=27*8)。

    问题就是,给定一个MS数N,求其所有的Monday-Saturday质因子。
    输入格式
      每个输入数据包含多行,每行一个整数N(保证N一定是MS数,1<N<300000)。
      输入的最后一行是一个整数1(对于这一行,你不必输出任何信息)。
      每个输入数据不超过100行。
    输出格式
      对于每个N输出一行,表示N的所有Monday-Saturday质因子,按从小到大的顺序输出。格式形如“N: p1 p2 p3 …… pk”,注意行末无多余空格。

    【样例输入】
      205920
      262144
      262200
      279936
      299998
      1

    【样例输出】
      205920: 6 8 13 15 20 22 55 99
      262144: 8
      262200: 6 8 15 20 50 57 69 76 92 190 230 475 575 874 2185
      279936: 6 8 27
      299998: 299998
    数据规模和约定
      1<N<300000,每个输入数据不超过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();
    
            }
    
    
        }
    }
    
    
  • 相关阅读:
    Bean作用域
    处理自动装配的歧义
    IOC/DI 依赖注入
    Session管理
    JSP
    Jenkins(持续集成)Windows版本安装
    Jenkins安装插件提速(Windows)终极解决办法
    Jenkins(持续集成)Windows版本解决插件安装缓慢
    Please wait while Jenkins is getting ready to work...(Jenkins访问资源慢的问题)
    Spring Boot 小技巧
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075814.html
Copyright © 2011-2022 走看看