算法题:给你一个自然数N,求[6, N]之内的全部素数中, 两两之和为偶数的那些偶数。

/*
算法题:给你一个自然数N,求[6, N]之内的全部素数中。
两两之和为偶数的那些偶数。

*/
#include <iostream>
using namespace std;
void Grial(int n)
{
    int *b = new int[n];
    int k = 0;
    b[k++] = 2;
    b[k++] = 3;
    b[k++] = 5;
    for (int i = 6; i < n; i++)
    {
        int j;
        for (j = 0; j < (k+1) / 2 ;j++)
        {
            if (i%b[j] == 0)break;
        }
        if(j == (k+1) / 2)
        b[k++] = i;
    }
    //已经找出了6-N的全部素数,那么要求和是这些素数之和的偶数
    //仅仅须要冒泡遍历全部的6-N的全部素数之后就OK。
    for (int i = 3; i < k-1; i++)
    {
        for (int j = i+1; j < k; j++)
        {
            cout << b[i]<<"+"<<b[j]<<"="<<b[i] + b[j];
            cout << endl;
        }
    }
}
int main()
{
    Grial(100);
}
时间: 2024-10-10 00:34:14

算法题:给你一个自然数N,求[6, N]之内的全部素数中, 两两之和为偶数的那些偶数。的相关文章

笔试算法题(22):二分法求旋转数组最小值 &amp; 骰子值概率

出题:将一个数组最开始的k个(K小于数组大小N)元素照搬到数组末尾,我们称之为数组的旋转:现在有一个已经排序的数组的一个旋转,要求输出旋转数组中的最小元素,且时间复杂度小于O(N): 分析: 时间复杂度小于O(N)也就是不能用常规的遍历思路:可以将数组看成两个都是递增序列(假设为升序)的子数组,并且前半段的元素均大于等于后半段的元素,分界点的位于后半段数组的第一个元素就是最小元素: 具体算法:两个指针left和right指向数组第一个和最后一个元素,使用Binary Search确定中间元素mi

【微软100题】输入一个整数,求该整数的二进制表达中有多少个1

package test; /** 整数的二进制表示中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1. 例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 分析: 方法一:把十进制转换成二进制字符数组,遍历该数组,判断1的个数. 方法二:对于一个int n, n&1的结果就是n转化成二进制数后的最后一位的结果.考察了位运算 包括微软在内的很多公司都曾采用过这道题. * @author Zealot * */ public class MS_28 { private

面试汇总——社招算法题篇

面试结果 总结下最近的面试: 头条后端:3面技术面挂 蚂蚁支付宝营销-机器学习平台开发: 技术面通过,年后被通知只有P7的hc 蚂蚁中台-机器学习平台开发: 技术面通过, 被蚂蚁HR挂掉(脉脉上好多人遇到这种情况,一个是今年大环境不好,另一个,面试尽量不要赶上阿里财年年底,这算是一点tips吧) 快手后端: 拿到offer 百度后端: 拿到offer 最终拒了百度,去快手了, 一心想去阿里, 个人有点阿里情节吧,缘分差点. 总结下最近的面试情况, 由于面了20多面, 就按照题型分类给大家一个总结

Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]

1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母构成,而且他不包含长度大于等于2的回文子串. 给出长度为n的非回文串s.请找出字典序比s大的,而且字典序要最小的长度为n的非回文. Input 单组测试数据. 第一行有两个整数n 和p (1≤n≤1000; 1≤p≤26). 第二行包含一个字符串s,它的长度是n.输入保证他是非回文的. Output

JavaScript算法题之–随机数的生成

JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2     length = 100, 3     i = 0; 4   5 for( ; i < length; i++ ){ 6     arr.push( i ); 7 } 从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复. 方法1:随机抽取法 01 var gRandomAr

算法题:求一个序列S中所有包含T的子序列(distinct sub sequence)

题: 给定一个序列S以及它的一个子序列T,求S的所有包含T的子序列.例: S = [1, 2, 3, 2, 4] T = [1, 2, 4] 则S的所有包含T的子序列为: [1, 2, 3, 2, 4] [1, 2, 3, 4] [1, 2, 2, 4] [1, 2, 4] 解: 首先可以拆解为两个问题: 1. 求S的所有子序列:其中又涉及到去重的问题. 2. 求S的所有子序列中包含T的子序列. 暂时先不考虑去重,看看问题1怎么解: 一.求S的子序列 单纯求一个序列的所有子序列的话,就是求序列的

一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数

昨天晚上看了一道逻辑题:一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数.题目后面写着,有人看了几分钟便给出了答案.我很好奇,此人是如何解答的. 我自己先琢磨了下,拿笔算了半天,最后一个巧合的情况下,得到了答案.此题的一个关键且明显的推论是:能被5除余3的数,肯定最后一位是3或者8.那么接下来怎么推呢?我从网上搜集了答案. 方案1: 这个数被5除余3,则此数个位数为3或8, 设这个数十位为x,则此数可表达为1703+10x,或1708+10x当此数为17

算法题:求数组中最小的k个数

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:输入n个整数,找出其中最小的k个数. <剑指offer>给出了两种实现算法: 算法1:采用Partition+递归法,该算法可以说是快速排序和二分查找的有机结合.算法的时间复杂度为O(n),缺点在于在修改Partition的过程中会修改原数组的值. 算法2:采用top-k算法.如果要找最小的K个数,我们才用一个含有K个值的大顶堆:如果要找最大的K个数,我们采用小顶堆.该算法的时间复杂度为O(nlogK),是一种比较好的算法,启发于堆排序

笔试算法题(35):最长递增子序列 &amp; 判定一个字符串是否可由另一个字符串旋转得到

出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连): 分析: 解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的影响:对于递增子序列 而言,可以首先确定前面k个元素的最长子序列,然后计算增加一个元素之后的最长子序列.由于每个位置i都会与0-i的每个位置之前的LIS进行比较,并选 择保持递增的一个序列,所以总能找到LIS,但是时间复杂度为O(N^2),空间复杂度为O(N): 此解法的性能的瓶颈在于对于位置为i+