首页
社区
课程
招聘
[求助]一个输入100个质数的实例;
发表于: 2013-5-29 13:22 4522

[求助]一个输入100个质数的实例;

2013-5-29 13:22
4522
最近在学习C++;
这个例子 是输出100个质数 从 2 3 5 开始;
我花了很常一段时间理解它, 一条一条代码看了N遍;
总算是能理解一点 并能照葫芦画瓢了。

我希望 朋友们有空 发上来其它一些不同形式的求质数个数的例子;

问题大概要这样问:输入从 2,3,5,7,11,开始的100个质数,每5个数一行 每个数间隔 10个空格。

在此附上原实例(以加上我所理想的注释):

#include <iostream>                        \\载入标准输入输出头文件
#include <iomanip>                         \\I/O流控制头文件

using std::endl;                            
using std::setw;
using std::cout;

int main()
{
	const int MAX = 100;         \\初始化数组元素100个数(常量)
	int primes[MAX] = {2,3,5};   \\初始化数组 例举出最开始的3个质数 
	int count = 3;            \\当前数组质数个数
	int trial = 5;                \\从5开始测试计算质数
	int found = 0;               \\声明这个变量以便在后面使用


	do                              \\(do-While)循环开始,此循环特性是最少循环一次
	{
		trial += 2;        \\把当前最高质数递增2

		for (int i = 0; i<count; i++)      
		{
			found = (trial %  *(primes + i)) == 0; \\trial是质found为1 否则把0赋给他
			if(found)  \\found为0就跳出本循环
				break;
		}

		if(found==0)     \\再次检测trial是否为质数
			*(primes+count++)=trial;  \\如果是质数把他写入数组并且使数组内存地址递增

	} while (count<MAX); \\如果计算质数的个数小于MAX就继续计算

	for (int i = 0; i<MAX;i++)
	{
		if(i % 5 == 0)      \\输入个数是5的倍数就
			cout<<endl;   \\换行
		cout<<setw(10)<<*(primes+i);  \\输入每个数组元素

	}
	cout<<endl;

	return 0 ;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 20923
活跃值: (4120)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
#include <stdio.h>
#include <conio.h>
#include <math.h>

bool IsPrime(int num);

void main(void)
{
	const int MAX = 100;
	int primes[MAX] = {2,3,5};
	int count = 3;
	int number = primes[count-1]+2;

	do
	{
		if (IsPrime(number))
		{
			primes[count] = number;
			count++;
		}
		number+=2;

	} while (count < MAX);
	
	for (int i = 0; i<MAX; i++)
	{
		if(i % 5 == 0)
			printf("\n");
		printf("%10d",primes[i]);
	}
	printf("\n");;

}

// Google !!!!
bool IsPrime(int num) 
{ 
	if(num<=1)
		return false; 
	if(num==2) 
		return true; 
	if(num%2==0)
		return false; 

	int sRoot = (int)sqrt(num*1.0); 

	for(int i=3; i<=sRoot; i+=2) 
	{ 
		if(num%i==0) 
			return false; 
	} 
	return true; 
} 


2013-5-29 14:19
0
雪    币: 20923
活跃值: (4120)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
另一个版本 (直接printf):
IsPrime一样


void main(void)
{
	const int MAX = 100;
	int primes[MAX] = {2,3,5};
	int count = 3;
	int number = primes[count-1]+2;

	for (int i=0;i<count;i++)
	{
		if(i % 5 == 0) printf("\n"); // 加入如果count可能大于5
		printf("%10d",primes[i]);
	}

	do
	{
		if (IsPrime(number))
		{
			if(count % 5 == 0)
				printf("\n");
			printf("%10d",number);
			count++;
		}
		number+=2;

	} while (count < MAX);
	
	printf("\n");


}

2013-5-29 15:23
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢你ato  真是学习了 我好好研究一下你的代码!!
2013-5-30 08:56
0
雪    币: 125
活跃值: (161)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
稍微改进下 sqrt有点慢
bool IsPrime(int num) 
{ 
  if(num<=1)
    return false; 
  if(num==2) 
    return true; 
  if(num%2==0)
    return false; 

  for(int i=3; i*i<=num; i+=2) 
  { 
    if(num%i==0) 
      return false; 
  } 
  return true; 
} 
2013-5-30 16:42
0
游客
登录 | 注册 方可回帖
返回
//