质数&&等差数列

题目

我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……

请你计算第 2019个质数是多少?

思路

想到之前也是一个暴力题目,python运行会超时,但是C++很快。这次我就试了试c++进行暴力。结果没有超时就得出答案了! 然后去试了试python的暴力,超时了,,,

但是太久没写C++了,写起来很生疏,,,

代码

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int add[2019];
  add[0] = 2;
  int n = 1;
  for(int i=3;n<2019;i++)
  {
    int flag = 1;
    for(int j = 2;j<i;j++)
    {
      if(i%j == 0)
      {
        flag = 0;
        break;
      }
    }
    if(flag == 1)
    {
      add[n] = i;
      n ++;
    }
  }
  printf("%d", add[2018]);
  return 0;
}

题目

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?

输入描述

输入的第一行包含一个整数 N。

第二行包含 N 个整数 1,2,⋅⋅⋅,A1​,A2​,⋅⋅⋅,AN​。(注意 A1​ ∼ AN​ 并不一定是按等差数列中的顺序给出)

其中,2≤N≤105,0≤Ai​≤109。

输出描述

输出一个整数表示答案。

思路

最开始的想法是,对输入后的数组进行排序,用第二大的数减去第一个数得到公差,如果公差为0,则数列长度为输入的整数n。否则从第一个数依次加公差,加到给出的最大一个数。 测试通过70%。

后面发现思路不对,比如2、6、8、10,按以上思路得到的公差是4,但实际是2。因此遍历排序后的数组,用后一个减去前一个数,记录最小的公差。如果公差为0,则输出当前数列长度n,否则数列长度 = (最大值-最小值)/ 公差 + 1

代码

import os
import sys

# 请在此输入您的代码

n = int(input())
data = list(((map(int, input().split()))))
data.sort()
start = data[0]
end = data[n-1]
add = data[1] - data[0] # 公差
for i in range(n-1):
  temp = data[i+1] - data[i]
  if temp < add:
    add = temp
if add == 0:
  print(n)
else:
  count = (data[n-1] - data[0]) / add 
  print(int(count + 1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值