0-100之间的素数判断素数的基本和优化方法
Posted bcbobo21cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0-100之间的素数判断素数的基本和优化方法相关的知识,希望对你有一定的参考价值。
100以内的素数有25个,
2、3、5、7、11、
13、17、19、23、29、
31、37、41、43、47、
53、59、61、67、71、
73、79、83、89、97;
用C语言输出一下;
#include "stdafx.h"
#include<stdio.h>
int main()
int a;
int i;
int count=0;
int isprime=1; //a是素数
for(a=2;a<100;a++)
for(i=2;i<a;i++)
if(a%i==0)
isprime=0;
break;
if(isprime==1)
count++;
printf("%d\\t ",a); //水平制表符
if(count%5==0)
printf("\\n"); //换行符
isprime=1;
return 0;
根据素数定义直接来的判断是否是素数的算法;
bool isp(int n)
for(int i = 2; i < n; i++)
if(n % i == 0) return false;
return true;
优化的方法;
int isPrime(int n)
if (n <= 1)
return 0;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return 0;
return 1;
ACM里应该有这个;可能还有不同的写法;
用MFC看一下;
VC2012,单文档工程;全部的视类CPP代码;用两种判断都输出1-100的素数看一下;
// primeView.cpp : CprimeView 类的实现
//
#include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "prime.h"
#endif
#include "primeDoc.h"
#include "primeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
bool isp(int );
int isPrime(int );
// CprimeView
IMPLEMENT_DYNCREATE(CprimeView, CView)
BEGIN_MESSAGE_MAP(CprimeView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CprimeView::OnFilePrintPreview)
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
// CprimeView 构造/析构
CprimeView::CprimeView()
// TODO: 在此处添加构造代码
CprimeView::~CprimeView()
BOOL CprimeView::PreCreateWindow(CREATESTRUCT& cs)
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
// CprimeView 绘制
void CprimeView::OnDraw(CDC* pDC)
CprimeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CString str1;
int row=0;
int cnt=0;
for (int i=2;i<100;i++)
if(isp(i))
cnt = cnt + 1;
str1.Format(_T("%d"), i);
pDC->TextOut(20+35*((cnt-1)%5), 20+row*30, str1);
if( cnt%5==0)
row=row+1;
cnt = 0;
row = 0;
for (int i=2;i<100;i++)
if(isPrime(i)==1)
cnt = cnt + 1;
str1.Format(_T("%d"), i);
pDC->TextOut(20+35*((cnt-1)%5), 200+row*30, str1);
if( cnt%5==0)
row=row+1;
// CprimeView 打印
void CprimeView::OnFilePrintPreview()
#ifndef SHARED_HANDLERS
AFXPrintPreview(this);
#endif
BOOL CprimeView::OnPreparePrinting(CPrintInfo* pInfo)
// 默认准备
return DoPreparePrinting(pInfo);
void CprimeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
// TODO: 添加额外的打印前进行的初始化过程
void CprimeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
// TODO: 添加打印后进行的清理过程
void CprimeView::OnRButtonUp(UINT /* nFlags */, CPoint point)
ClientToScreen(&point);
OnContextMenu(this, point);
void CprimeView::OnContextMenu(CWnd* /* pWnd */, CPoint point)
#ifndef SHARED_HANDLERS
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
// CprimeView 诊断
#ifdef _DEBUG
void CprimeView::AssertValid() const
CView::AssertValid();
void CprimeView::Dump(CDumpContext& dc) const
CView::Dump(dc);
CprimeDoc* CprimeView::GetDocument() const // 非调试版本是内联的
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CprimeDoc)));
return (CprimeDoc*)m_pDocument;
#endif //_DEBUG
// CprimeView 消息处理程序
bool isp(int n)
for(int i = 2; i < n; i++)
if(n % i == 0) return false;
return true;
int isPrime(int n)
if (n <= 1)
return 0;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return 0;
return 1;
以上是关于0-100之间的素数判断素数的基本和优化方法的主要内容,如果未能解决你的问题,请参考以下文章
代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。