每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
是不是超素数?
如果一个数是素数,并且能被分解为C(C>=2)个连续素数的和,则称这个数为“超素数”,请编程判断一个数是否是超素数。
输入格式:
一个正整数N(1
输出格式:
给定的整数N为超素数,请输入yes,否则请输出no
输入样例:
5
输出样例:
yes
解决方法:
(1)算法的基本思想:
1)先找出小于N的所有素数。
2)从这些素数的子序列中寻找和等于N的子序列,通过两个工作指针p,q,一个指向序列的开始,一个指向序列的末尾,开始时p指向第一个素数,q指向小于N的最后一个素数。若子序列的和比N小,则p后移,若和比N大,则q前移,否则,即找到了和等于N的连续素数序列。
(2)代码实现:
#include
#include
#define MAX_LENGTH 100000
using namespace std;
bool isPrimeNumber(int num);
bool isSuperPrimeNumber(int num);
int sumOfArr(int *arr, int m, int n);
int main(void)
{
int num;
cout <"请输入数字:" cin >> num;
if (isSuperPrimeNumber(num))
{
cout <"yes" }
else
{
cout <"no" }
return 0;
}
bool isPrimeNumber(int num)
{
if (num <= 1)
return false;
int result = true;
for (int i = 2; i <= sqrt(num); i++)
{
if (num % i == 0)
{
result = false;
break;
}
}
return result;
}
bool isSuperPrimeNumber(int num)
{
if (!isPrimeNumber(num))
return false;
bool result = true;
int prime_arr[MAX_LENGTH];
int length = 0;
for (int i = 2; i {
if (isPrimeNumber(i))
{
prime_arr[length] = i;
length++;
}
}
int p, q;
p = 0;
q = length - 1;
while (p {
int sum = sumOfArr(prime_arr, p, q);
if (sum {
p++;
}
else if (sum > num)
{
q--;
}
else
{
break;
}
}
if (p == q)
{
result = false;
}
else
{
cout <"----- SUM OF -----" for (int i = p; i <= q; i++)
{
cout <" ";
}
cout cout <"------------------" }
return result;
}
int sumOfArr(int *arr, int m, int n)
{
int sum = 0;
for (int i = m; i <= n; i++)
{
sum += arr[i];
}
return sum;
}
字符串处理-1-字母a的个数
输入一段不超过80个英文字符的字符串,统计其中有多少个a字母
输出这段英文字符中字母a的个数
输入样例:
fave cad ecd ygaijj
输出样例:
3