0-100之间的素数、判断素数的基本和优化方法
100以?xún)?nèi)的素?cái)?shù)有25個(gè),
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語(yǔ)言輸出一下;
?
根據(jù)素?cái)?shù)定義直接來(lái)的判斷是否是素?cái)?shù)的算法;
?
bool isp(int n)
{
? ? for(int i = 2; i < n; i++)
? ? {
? ? ? ? if(n % i == 0) return false;
? ? }
? ? return true;
}
優(yōu)化的方法;
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里應(yīng)該有這個(gè);可能還有不同的寫(xiě)法;
用MFC看一下;
VC2012,單文檔工程;全部的視類(lèi)CPP代碼;用兩種判斷都輸出1-100的素?cái)?shù)看一下;
// primeView.cpp : CprimeView 類(lèi)的實(shí)現(xiàn) //#include "stdafx.h" // SHARED_HANDLERS 可以在實(shí)現(xiàn)預(yù)覽、縮略圖和搜索篩選器句柄的 // ATL 項(xiàng)目中進(jìn)行定義,并允許與該項(xiàng)目共享文檔代碼。 #ifndef SHARED_HANDLERS #include "prime.h" #endif#include "primeDoc.h" #include "primeView.h"#ifdef _DEBUG #define new DEBUG_NEW #endifbool isp(int ); int isPrime(int );// CprimeViewIMPLEMENT_DYNCREATE(CprimeView, CView)BEGIN_MESSAGE_MAP(CprimeView, CView)// 標(biāo)準(zhǔn)打印命令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 構(gòu)造/析構(gòu)CprimeView::CprimeView() {// TODO: 在此處添加構(gòu)造代碼}CprimeView::~CprimeView() { }BOOL CprimeView::PreCreateWindow(CREATESTRUCT& cs) {// TODO: 在此處通過(guò)修改// CREATESTRUCT cs 來(lái)修改窗口類(lèi)或樣式return CView::PreCreateWindow(cs); }// CprimeView 繪制void CprimeView::OnDraw(CDC* pDC) {CprimeDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼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_HANDLERSAFXPrintPreview(this); #endif }BOOL CprimeView::OnPreparePrinting(CPrintInfo* pInfo) {// 默認(rèn)準(zhǔn)備return DoPreparePrinting(pInfo); }void CprimeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: 添加額外的打印前進(jìn)行的初始化過(guò)程 }void CprimeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: 添加打印后進(jìn)行的清理過(guò)程 }void CprimeView::OnRButtonUp(UINT /* nFlags */, CPoint point) {ClientToScreen(&point);OnContextMenu(this, point); }void CprimeView::OnContextMenu(CWnd* /* pWnd */, CPoint point) { #ifndef SHARED_HANDLERStheApp.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 // 非調(diào)試版本是內(nèi)聯(lián)的 {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; }?
總結(jié)
以上是生活随笔為你收集整理的0-100之间的素数、判断素数的基本和优化方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 内存管理单元MMU学习
- 下一篇: GDI对象存储和查看lib文件导出函数