题目:给出一个单词,a代表1,z代表26,A代表27,Z代表52,判断所有字母之和是不是素数。
分析:简单题。首先利用筛法打表计算出前1040中的素数,然后计算判断即可。
注意:本题中1是素数。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int prime[1045];
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 <= 1040 ; ++ i )
prime[i] = 1;
for ( int i = 2 ; i <= 1040 ; ++ i )
if ( prime[i] )
for ( int j = 2*i ; j <= 1040 ; j += i )
prime[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 ( !prime[sum] ) cout << "not ";
cout << "a prime word." << endl;
}
return 0;
}