poj739

来源:互联网 发布:软件测试答辩ppt 编辑:程序博客网 时间:2024/06/14 16:44

判断一个数(1,1000)能够写成几种连续素数之和的形式

这道题很简单,如果输入量很大就用筛法把所有素数(1,1000)求出来.如果输入不大,就写一个isprime函数直接判断,没有太多可说的内容.

代码:首先找到一个最小的尚未被删除的素数,记录它,然后删除它的所有整数倍数.

int j = 2, t = 0;    int Isdeleted[1000] = {-1,-1};    while(j<=1000)    {        while( Isdeleted[j] == -1)//找到第一个没有被删除的最小元素        {            j++;        }        Prime[t++] = j;        for(int k = j;k<=1000;k+=j)        {            Isdeleted[k] = -1;//删除        }    }
#include "stdafx.h"#include "iostream"#include "cmath"using namespace std;int Prime[168] = {0};int isprime(int N){    if(N%2 == 0&&N!=2)        return 0;    for (int i = 3;i*i <=N;i+=2)    {        if(N%i==0)            return 0;    }    return 1;}void Find(int N){    int sum = 0;    int Num = 0;    for(int i = 2;i<= N;i++)    {        while(!isprime(i))//找到一个素数            i++;        sum = 0;        for(int j = i;sum<=N;j++)        {                while(!isprime(j))//找到一个素数                j++;              sum += j;              if(sum==N)              Num++;        }    }    cout<<Num<<endl;}int main(){    int N;    while(1)    {        cin>>N;        if(N==0)            break;        Find(N);    }    return 0;}
0 0
原创粉丝点击