【编程小题目2】求解素数

题目:判断101-200之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 
则表明此数不是素数,反之是素数。

//连续整除法求解素数

#include <iostream>

#include <cmath>

#include <iomanip>

using namespace std;

int main()

{

  int i, j, count = 0;

  for(i = 101; i <= 200; i++)

  {

    for(j = 2; j <= sqrt(i); j++)

    {

      if( i % j == 0)

      {

        break;

      }

    }

    if(j > sqrt(i))

    {

      count++;

      cout << setw(5) << i;

      if(count % 5 == 0)

      {

        cout << endl;

      }

    }

  }

  cout << endl << "素数总个数为:" << count <<endl;

  return 0;

}

//Sieve筛选法求素数

#include <iostream>

#include <cmath>

#include<iomanip>

using namespace std;

void setSieveElements(int *SieveElements, int size) // 0-size 设置待筛选数组
{
  for(int i = 0; i <= size; ++i)
  {
    SieveElements[i] = i;
  }
}

void getSieveElemets(int *SieveElements, int SieveLimit, int size)
{
  int i, j = 0;
  for(i = 2; i < SieveLimit; ++i)
  {
    if(SieveElements[i] != 0) //筛选,0标记非素数
    {
      j = i * i;
    }
    while (j <= size)
    {
      SieveElements[j] = 0;
      j += i;
    }
  }
}

void print(const int *SieveElements, int size)
{
  int count = 0;
  for(int i = 0; i <= size; ++i)
  {
    if(SieveElements[i] >= 101) //计数、输出101-200之间的素数
    {
      count++;
      cout << setw(5) << SieveElements[i];
      if(count % 5 == 0)
      {
        cout << endl;
      }
    }
  }
  cout << endl << "素数总个数为:" << count << endl;
}


int main()
{
  const int size = 200;
  int SieveElements[size + 1];
  const int SieveLimit = (int) sqrt(size);

  setSieveElements(SieveElements, size);
  getSieveElemets(SieveElements, SieveLimit, size);
  print(SieveElements, size);

  return 0;
}

时间: 2024-11-05 18:45:10

【编程小题目2】求解素数的相关文章

Python编程学习,高效求解素数程序实例

素数是编程中经常需要用到的. 作为学习Python的示例,下面是一个高效求解一个范围内的素数的程序,不需要使用除法或者求模运算. 1 #coding:utf-8 #设置python文件的编码为utf-8,这样就可以写入中文注释 2 def primeRange(n): 3 myArray=[1 for x in range(n+1)] ##列表解析,生成长度为(n+1)的列表,每个数值都为1 4 myArray[0]=0 5 myArray[1]=0 6 startPos=2 7 while s

【编程小题目8】求解完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程 找出100以内的所有完数. 分析:本质还是求质因数. #include <iostream> using namespace std; bool IsPerfect(int n){ int i, j = 0; int Temp = n,Sum = 1; int arr[100] = {'0'}; for(i = 2; i <= n; i++) { if(i == n) { arr[j

【编程小题目1】求解斐波拉契数列问题

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”.Fibonacci 数列定义:n = 1,2 时,fib(n) = 1n > 2 时,fib(n) = fib(n-2) + fib(n-1) // 递归算法求解Fibonacci 数列 #i

【编程小题目3】求解水仙花数

题目:打印出100 - 999 之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方. 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. #include <iostream> #include <iomanip> using namespace std; int main() {

【编程小题目5】求解最大公约数和最大公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法求最大公约数:最大公倍数等于m * n / Gcd(m,n). #include <iostream> using namespace std; int main() { int n, m; int k,r = 1; cout << "Plese input the number n and m:"; cin >> n >> m; k = n * m; whil

【编程小题目4】求解质因数

题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n != k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. #include <iostream> using namespace std; int

【编程小题目6】字符数统计

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. #include <iostream>#include <string>using namespace std; int main(){ const int size = 100; char ch[size]; int CharNum = 0, DigNum = 0, NullNum = 0, OtherNum = 0;  for(int i = 0; i < size; i++) { ch[i] =

【编程小题目7】求s=a+aa+aaa+aaaa+aa...a的值

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制 #include <iostream>#include <string>using namespace std; long Function(int number, int n){ if(n == 1) { return number; } else { return Function(number ,n - 1) *

Java编程用栈来求解汉诺塔问题的代码实例(非递归)_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 [题目] 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间.求当塔有N层的时候,打印最优移动过程和最优移动总步数. [解答] 上一篇用的是递归的方法解决这个问题,这里我们用栈来模拟汉诺塔的三个塔,也就是不用递归的方法 原理是这样的:修改后的汉诺塔问题不能让任何塔从左直接移动到右,也不能从右直接移动到左,而是要经过中间,也就是说,实际上