求素数
输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数
输入描述:
代码语言:javascript复制两个整数M,N
输出描述:
代码语言:javascript复制区间内素数的个数
示例1
输入
代码语言:javascript复制2 10
输出
代码语言:javascript复制4
代码语言:javascript复制#include<iostream>
#define K 1000001
using namespace std;
char p[K 1] = {1,1,0}; //数组前三个数 0 1 2 分别为 合数、合数、素数
int main()
{
int i,j;
for(i = 2; i <= K/10; i) //防止p[i*j]越界
{
if(!p[i])
for(j = 2; i*j <=K ; j) //判断是否为合数
p[i*j] = 1; //是合数
}
int M,N,count;
cin>>M;
cin>>N;
count=0;
for(i=M; i<=N; i )
if(!p[i]) //如果p[i]为合数,则跳过,如果为素数,执行count
count ;
cout<<count;
}
分析:
由素数的概念在大于1的整数中,只能被1和自己本身整除的数。
在大于1的整数中,只要类似 m*n 得到的数都不是素数。用 1 表示非素数,用 0 表示素数。则: p[i*j] = 1 即为找出所有的非素数。
K/10 是为了防止 p[i*j] 越界,当然除以20、30也是可以的!
参考资料链接:
【模板小程序】求小于等于N范围内的质数
牛客网解答
最大差值
给定一个未排序的数列,找到此数列在已排序状态下的两个相邻值的最大差值,少于两个值时返回0。例如:给定数列 [1,3,2,0,1,6,8] 则 最大差值为3。注意:请尽量使用时间复杂度为O(n)的方案。
输入描述:
代码语言:javascript复制第一行输入单个整数N作为数列的大小,第二行输入所有数列中的元素M,共N个。0 < N <= 1000000, 0 < M < 2100000000
输出描述:
代码语言:javascript复制数列的最大差值
示例1
输入
代码语言:javascript复制3
1 10 5
输出
代码语言:javascript复制5
代码语言:javascript复制#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int N;
while(cin>>N){
vector<int> array(N);
for(int i=0;i<(int)array.size(); i){
cin>>array[i];
}
sort(array.begin(),array.end()); //先排序
vector<int> chazhi(N); //开一个数组,存入相邻元素差值
chazhi[0] = 0; //数组初始化
int max_chazhi = 0;
for(int i=1;i<(int)chazhi.size(); i){
chazhi[i]=array[i]-array[i-1];
max_chazhi = chazhi[i]>max_chazhi ? chazhi[i]: max_chazhi;
}
cout<<max_chazhi<<endl;
}
return 0;
}
分析:
研究了一下别人的代码,整体思路就是先对输入的数列进行从小到大的排序,接着创建一个数组,存入排序后相邻两个数之间的差值,接着再挨个比较大小,最后输出最大差值。
参考资料链接:
牛客网解答
vector
algorithm->sort