第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-51算法训练 Torry的困惑(基本型)

简介: 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-51算法训练 Torry的困惑(基本型)

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-51算法训练 Torry的困惑(基本型)


前言

       这段时间我会把蓝桥杯官网上的所有非VIP题目都发布一遍,让大家方便去搜索,所有题目都会有几种语言的写法,帮助大家提供一个思路,当然,思路只是思路,千万别只看着答案就认为会了啊,这个方法基本上很难让你成长,成长是在思考的过程中找寻到自己的那个解题思路,并且首先肯定要依靠于题海战术来让自己的解题思维进行一定量的训练,如果没有这个量变到质变的过程你会发现对于相对需要思考的题目你解决的速度就会非常慢,这个思维过程甚至没有纸笔的绘制你根本无法在大脑中勾勒出来,所以我们前期学习的时候是学习别人的思路通过自己的方式转换思维变成自己的模式,说着听绕口,但是就是靠量来堆叠思维方式,刷题方案自主定义的话肯定就是从非常简单的开始,稍微对数据结构有一定的理解,暴力、二分法等等,一步步的成长,数据结构很多,一般也就几种啊,线性表、树、图、再就是其它了。顺序表与链表也就是线性表,当然栈,队列还有串都是属于线性表的,这个我就不在这里一一细分了,相对来说都要慢慢来一个个搞定的。蓝桥杯中对于大专来说相对是比较友好的,例如三分枚举、离散化,图,复杂数据结构还有统计都是不考的,我们找简单题刷个一两百,然后再进行中等题目的训练,当我们掌握深度搜索与广度搜索后再往动态规划上靠一靠,慢慢的就会掌握各种规律,有了规律就能大胆的长一些难度比较高的题目了,再次说明,刷题一定要循序渐进,千万别想着直接就能解决难题,那只是对自己进行劝退处理。加油,平常心,一步步前进。


算法训练 Torry的困惑(基本型)

资源限制

内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。

输入格式

  仅包含一个正整数n,其中n<=100000。

输出格式

  输出一行,即前n个质数的乘积模50000的值。

样例输入

1

样例输出

2

题解:这个题目难度在于超大数的处理。

C语言

#include<stdio.h>
int pr[100010];
int top;
int isPrime(int n)
{
  int i;
  for(i = 0; i < top; i++)
  {
    if(n % pr[i] == 0)
    {
      return 0;
    }
  }
  return 1;
}
int findNextPrime(void)
{
  int n = pr[top - 1] + 1;
  while(!isPrime(n))
  {
    n++;
  }
  pr[top++] = n;
  return n;
}
int main(void)
{
  int i, n;
  int result = 2;
  scanf("%d", &n);
  pr[0] = 2;
  top = 1;
  for(i = 1; i < n; i++)
  {
    int x = findNextPrime();
    result *= x;
    result %= 50000;
  }
  printf("%d", result);
  return 0;
}

C++语言

#include <iostream>
using namespace std;
int a[100005];
int main()
{
  unsigned int i, j, n, cnt = 1, cj = 2;
  cin >> n;
  if (n == 1)
  {
    cout << 2 << endl;
    return 0;
  }
  a[0] = 2;
  for (i = 3; i < 2000000; i++)
  {
    for (j = 0; j < cnt; j++)
    {
      if (a[j] * a[j] > i)
      {
        break;
      }
      else
      {
        if (!(i % a[j]))
        {
          break;
        }
      }
    }
    if (a[j] * a[j] > i)
    {
      a[cnt++] = i;
      cj = (cj % 50000) * (i % 50000) ;
      if (cnt == n)
      {
        break;
      }
    }
  }
  cout << cj % 50000 << endl;
  return 0;
}

Java语言

计算起来还是非常的麻烦。

import java.io.*;
public class Main {
  public static void main(String[] args) {
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in),1);
      String line = br.readLine();
      int n = Integer.parseInt(line);
      getans(n);
    }catch(Exception e){
      System.out.println("Message:"+e.getMessage());
    }   
  }
  
  public static void getans(int n){
    if(n<1);
    else if(n==1)System.out.println(2);
    else if(n<7){
      long ans = 6,nowp = 3;
      for(int i=0;i<n-2;i++){
        nowp=nextprime(nowp);
        ans*=nowp;
      }
      System.out.println(ans);
    }else if(n==7)System.out.println(10510);
    else if(n<100){
      long ans = 10510,nowp = 17;
      for(int i=0;i<n-7;i++){
        nowp=nextprime(nowp);
        ans=ans*nowp%50000;
      }
      System.out.println(ans);
    }else if(n==100)System.out.println(31090);
    else if(n<1000){
      long ans = 31090,nowp = 541;
      for(int i=0;i<n-100;i++){
        nowp=nextprime(nowp);
        ans=ans*nowp%50000;
      }
      System.out.println(ans);
    }else if(n==1000)System.out.println(1570);
    else if(n<=10000){
      long ans = 1570,nowp = 7919;
      for(int i=0;i<n-100;i++){
        nowp=nextprime(nowp);
        ans=ans*nowp%50000;
      }
      System.out.println(ans);
    }else if(n==10000)System.out.println(48410);
    else if(n<100000){
      long ans = 48410,nowp = 115321;
      for(int i=0;i<n-100;i++){
        nowp=nextprime(nowp);
        ans=nowp%50000*ans%50000;
      }
      System.out.println(ans);
    }else if(n==100000)System.out.println(20710);
    else{
      long ans = 20710,nowp = 1452433;
      for(int i=0;i<n-100;i++){
        nowp=nextprime(nowp);
        ans=nowp%50000*ans%50000;
      }
      System.out.println(ans);
    }
  }
  
  public static long nextprime(long now){
    now+=2;
    int check = 0;
    while(true){
      check = checkprime(now);
      if(check==0)
        now+=2;
      else
        break;
    }
    return now;
  }
  
  public static int checkprime(long n){
    for(int i=3;i<=Math.sqrt(n);i+=2)
      if(n%i==0)return 0;
    return 1;
  }
  
}

Python语言

Python去掉了数据类型的处理,相对来说还是代码简洁一些的。

n=eval(input())
num=1
i=2
count=0
while True:
    flag=0
    for j in range(2,i):
        if i%j==0:
            flag=1
            break
    if flag==0:
        count+=1
        if num>50000:
            num%=50000
        num*=i
    if count==n:
        print(num%50000)
        break
    i+=1

总结

没有什么不付出就能拿到的结果,我们都是在负重前行,最终结果与自身先天的脑力有一定的关系,但是还是有很大一部分看自己后天的努力,其实从报名到比赛也就5个月左右,真正刷题的事件也就2个月,2个月回忆一下你真正的认真刷过题吗,如果你真的用尽所有的精力去努力了,那么我相信你最终的成绩一定会让你满意的,加油。

没有什么不付出就能拿到的结果,我们都是在负重前行,最终结果与自身先天的脑力有一定的关系,但是还是有很大一部分看自己后天的努力,其实从报名到比赛也就5个月左右,真正刷题的事件也就2个月,2个月回忆一下你真正的认真刷过题吗,如果你真的用尽所有的精力去努力了,那么我相信你最终的成绩一定会让你满意的,加油。


相关文章
|
29天前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
99 0
|
29天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
50 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
9天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
24天前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
50 0
|
1月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
1月前
|
算法 C++
蓝桥 算法训练 共线(C++)
蓝桥 算法训练 共线(C++)
|
4月前
knn增强数据训练
【7月更文挑战第27天】
35 10
|
4月前
|
数据采集 编解码 人工智能
破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍
【7月更文挑战第19天】DeepMind的JEST算法革新AI训练,提升效率13倍,节能10倍。通过联合数据批次选择,预训练指导及多分辨率训练,优化资源利用,降低能耗。实验显示性能提升,达到SOTA水平,但实施需大量资源,依赖优质参考模型。[论文链接](https://arxiv.org/pdf/2406.17711)
66 10
下一篇
无影云桌面