2019独角兽企业重金招聘Python工程师标准>>>
【问题描述】
本题输入一个单词集合,每个单词由a-z和A-Z的字母组成。每个字母对应一个特殊的值,字母a对应1,字母b对应2,以此类推,字母z对应26;同样,字母A对应27,字母B对应28,字母Z对应52。
已个单词的字母总和是素数,则这个单词是素单词,请编写程序,判定一个单词是否为素单词。
输入:
输入给出一个单词集合,每个单词一行,有L个字母,1<=L<=20.输入以EOF结束。
输出:
如果一个单词的子母和为素数,则输出“It is a prime word.”;否则输出“It is not a prime word.”
样例输入:
24 3
24 2
2 1
1 1
4 2
18 3
17 1
17 3
17 4
100 5
1000 10
1120 14
0 0
样例输出:
It is a prime word.
It is not a prime word.
It is not a prime word.
【解题思路】
特别提示:此题中1位素数。
先离线计算出[2‥1010]的素数筛u[]。然后计算字母对应的数字和。判断该数书否为素数。输出结果。
【具体实现】
#include<iostream>
#include<cstring>
#define maxNum 1040
using namespace std;
int SIGN[maxNum];
int value(char c)
{
if (c >= 'a' & c <= 'z')
return c - 'a' + 1;
else return c - 'A' + 27;
}
int main(){
for (int i = 1; i <= maxNum; ++i)
SIGN[i] = 1;
for (int i = 2; i <= maxNum; ++i)
if (SIGN[i])
for (int j = 2 * i; j <= maxNum; j += i)
SIGN[j] = 0;
char str[25];
while (cin >> str){
int sum = 0;
for (int i = 0; str[i]; ++i){
sum += value(str[i]);
}
cout << "It is ";
if (!SIGN[sum]) cout << "not ";
cout << "a prime word." << endl;
}
return 0;
}
【额外补充】
此题中1为素数。
1是素数吗?是我数学没学好?还是出题人的数学是体育老师教的?
生无可恋。