编程求1000以内所有素数,谁会编?
我不会啊。。。。
[解决办法]
用下面的程序试试看,绝对没有任何问题。
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int m,i,k;
int n=0;
bool num; //定义布尔型变量num
for(m=1;m<=1000;m=m+2) //判别m是否为素数,m是由1到1000的整数
{
num=true; //循环开始时设num为真
k=int(sqrt(m));
for(i=2;i<=k;i++)
if(m%i==0)
{
num=false;
break;
}
if(num) //如果num为素数
{
cout<<setw(5)<<m;
n=n+1;
}
if(n%10==0)
cout<<'\n';
}
cout<<endl;
return 0;
}
[解决办法]
楼主你看这个成不
bool prime(long CheckPrime)
{
if(CheckPrime>1)
{
long valueSqrt=sqrt((float) CheckPrime);
for(int i=2;i<=valueSqrt;i++)
{
if(fmod((double)CheckPrime,(double)i))
continue;
else
return false;
}
return true;
}
else
{
cout<<"Invalid Number!"<<endl;
return false;
}
}
[解决办法]
//以前写的一个C语言的//题目:输入一个整数,要求输出所有从1到这个整数之间个位为1的素数,如果没有则输出-1#include <stdio.h>#include <math.h>#include <stdlib.h>int IsPrime(int n); //判断n是否是素数int Position(int n); //判断个位是否是1int power(int data,int n); //计算data的n方int main(){int n,i;int count=0;printf("Enter a integer: ");;scanf("%d",&n); i=2;Position(n);while(i!=n){ if(IsPrime(i) && Position(i)) { printf("%-6d",i); count++; if(count%10==0) printf("\n"); } i++;}if(!count) printf("-1\n");printf("\n");return 0;}int IsPrime(int n) //判断n是否是素数{int m=(int)sqrt(n);for(int i=2;i<=m;++i) if(n%i==0) return 0;return 1;}int Position(int n) //判断个位是否是1{int count=1;int temp=n;while(temp>10){ temp/=10; count++;}temp=n;while(count!=1){ temp=temp-temp/power(10,count-1)*power(10,count-1); count--;} if(temp==1) return 1;return 0;}int power(int data,int n) //计算data的n方{int result=1;for(int i=0;i<n;++i) result*=data;return result;}
[解决办法]
#include <iostream>using namespace std;int main(){ int total = 0; for ( int x = 1; x < 1000; x += 2) { bool z = false; for (int y = 3; y < x; y += 2) { if (x % y == 0) { z = true; break; } } if (z == false) { total++; cout<<x<<endl; } } cout<<"共计:"<<total<<"个"<<endl; system("pause"); return 0;}
[解决办法]
无聊,贴个来玩玩
1亿以内应该1秒左右
数域筛选更快
// 123.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <vector>#include <bitset>#include <ctime>typedef unsigned int size_type;using namespace std;//typedef unsigned int SIZE_T;typedef unsigned __int64 CTIME;int _tmain(int argc, _TCHAR* argv[]){ const size_type k = 100000000; const size_type n = (k + 1) / 2; bitset<n> * v = new bitset<n> ; v->set(); time_t t = clock(); v->reset(0); for(size_type x = 3;x * x < v->size() + v->size();x += 2){ if(v->test(x / 2)){ for(size_type i = x * x ;i < v->size() + v->size();i += x + x){ v->reset(i / 2); } } } size_type num = 1; for(size_type x = 0; x < v->size();++ x){ if(v->test(x)) ++ num; } t = clock() - t; //cout<<2<<" "; //for(size_type x = 0; x < v->size();++ x){ // if(v->test(x)) // cout<<x + x + 1<<" "; //} //cout<<endl; cout<<"花费时间"<<t<<endl; cout<<"素数数量"<<num<<endl; delete v; return 0;}
[解决办法]
#include<stdio.h>int main(void){ int n1,nm,i,j,flag,count=0; do{ printf("Input START and END=?"); scanf("%d%d",&n1,&nm); /*输入求素数的范围*/ }while(!(n1>0&&n1<nm)); /*输入正确的范围*/ printf("...........PRIME TABLE(%d--%d)............\n",n1,nm); if(n1==1||n1==2) /*处理素数2*/ { printf("%4d",2); n1=3;count++; } for(i=n1;i<=nm;i++) /*判定指定范围内的整数是否为素数*/ { if(!(i%2))continue; for(flag=1,j=3;flag&&j<i/2;j+=2) /*判定能否被从3到整数的一半中的某一数所整除*/ if(!(i%j))flag=0; /*若能整除则不是素数*/ if(flag) printf(++count%15?"%4d":"%4d\n",i); } return 0;}
[解决办法]
#include<stdio.h>#include<math.h>int main(void){ int m,i,k,h=0,leap=1; printf("\n"); for(m=2;m<=1000;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) { leap=0; break; } if(leap) { printf("%-4d",m); h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d\n",h); return 0; }
[解决办法]
我也来写个简单的,
#include <iostream>using namespace std;const int SIZE = 1001;bool prime[SIZE];int main(){ int i, j; memset(prime, 0, sizeof(prime)); for(i=2;i<SIZE;i++) { if(!prime[i]) { j = 2; while(i*j < SIZE) { //素数的倍数不是素数 prime[i*j] = true; j++; } } } for(i=2;i<SIZE;i++) if(!prime[i]) cout << i << "\t"; cout << endl; return 0;}
[解决办法]
#include <stdio.h> // 筛选法求素数(Prime)int main(){ int i, j, nTotal = 0, n = 1000, a[1001] = {0}; for(i = 2; i < n; i++) // 将非素数排除 { if(a[i]) continue; for(j = i; j <= n / i; j++) { a[j * i] = 1; } } for(i = 2; i <= n; i++) // 打印素数和计数 { if(!a[i]) { printf("%d,", i); nTotal++; } } printf("\nTotal = %d\n", nTotal); return 0;}