一个数可以用有多少种连续素数之和表示(C++)

在这里插入图片描述
输入:

2
3
17
41
20
666
12
53
0

输出:

1
1
2
3
0
0
1
2
#include <iostream>
using namespace std;
const int maxp = 2000, n = 10000;
int prime[maxp], total = 0;
bool isprime(int k) //bool函数用来求素数
{
    
    
    for (int i = 0; i < total; i++)
        if (k % prime[i] == 0) //判断素数的一种方法(用这个数对数组当中所有的 素数 进行取余;
            return false;
    return true;
}
int main()
{
    
    
    for (int i = 2; i < n; i++)
        if (isprime(i))
            prime[total++] = i; //total++是先用后加。此处之前的代码是把2~n之间的素数全部都存储到prime[total]数组中。
    prime[total] = n + 1;
    int m;
    cin >> m;
    while (m)
    {
    
    
        int ans = 0;                        //用于计算个数
        for (int i = 0; prime[i] <= m; i++) //外层循环用来枚举所有的可能性
        {
    
    
            int cnt = 0;                             //求和
            for (int j = i; j < total, cnt < m; j++) //内循环用来判断所求和的大小是否符合
                cnt += prime[j];
            if (cnt == m)
                ++ans;
        }
        cout << ans << endl;
        cin >> m;
    }
    return 0;
}


#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

bool isPrime(int k) //bool函数用来求素数
{
    
    
    for (int i = 2; i <= sqrt(k); i++)
    {
    
    
        if (k % i == 0)
            return false;
    }
    return true;
}

int main()
{
    
    
    const int n = 10000;
    vector<int> arr; //用来存放2~10000之间的所有素数;
    for (int i = 2; i <= n; i++)
    {
    
    
        if (isPrime(i))
            arr.push_back(i);
    }
    int num; //定义输入的整数;
    cin >> num;
    while (num) //非0一直循环输入,0停止循环;
    {
    
    
        int ans = 0;                        // 个数;
        for (int i = 0; arr[i] <= num; i++) //外层循环用来枚举所有的可能性
        {
    
    
            int sum = 0;
            for (int j = i; sum < num; j++) //内循环用来判断所求和的大小是否符合
                sum += arr[j];
            if (sum == num)
                ans++;
        }
        cout << ans << endl;
        cin >> num;
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/wangyurenwls/article/details/119181532