我如何找到所有3位数字,其数字总和是素数?

时间:2014-06-09 17:43:07

标签: c++

在本课中,我必须弄清楚如何使用其中一个操作符来执行此操作:

  1. if - else
  2. while
  3. 做 - 而
  4. 我认为我的计划应该有效,但事实并非如此。救命啊!

    #include<iostream>
    using namespace std;
    
    int main()
    {  
        int F=0;
        int s,d,e;
    
        for(int i=105; i<999; i++)
        {
            s=i/100;
            d=i/10 %10;
            e=i%10;
    
            for(int T=2; T<=(s+d+e)/2 ; T++)
            { 
                if( (s+e+d)%T == 0)
                    F=1; 
            }
    
            if (F==0)
                cout<<i<<endl;
        }
    
        return 0;
    }  
    

2 个答案:

答案 0 :(得分:3)

不是生成所有可能的3位数字,而是查看每个数字的总和是否为素数,我将在另一个方向工作:生成正确范围内的所有素数(不是很多其中,因为999仅加起来27)。

然后我会生成每个可能的所有三位数字 - 两个循环以生成前两位数字和简单减法以在每种情况下生成第三位数字。

答案 1 :(得分:-1)

尝试以下

#include<iostream>

int main()
{  
    for ( int i = 100; i < 1000; i++ )
    {
        int sum = i / 100 + i / 10 % 10 + i % 10;

        bool prime = sum == 2 || ( 2 < sum && sum % 2 );

        for ( int j = 3; prime && j * j <= sum ; j += 2 )
        {
            prime = sum % j != 0; 
        }

        if ( prime ) std::cout << "The sum " << sum 
                               << " of digits of number " << i 
                               << " is a prime number"
                               << std::endl;
    }

    return 0;
} 

如果语句(例如迭代语句)必须不同,您可以编写例如

#include<iostream>

int main()
{
    int i = 99;  
    while ( ++i < 1000 )
    {
        int sum = i / 100 + i / 10 % 10 + i % 10;

        bool prime = sum == 2 || ( 2 < sum && sum % 2 );

        for ( int j = 3; prime && j * j <= sum ; j += 2 )
        {
            prime = sum % j != 0; 
        }

        if ( prime ) std::cout << "The sum " << sum 
                               << " of digits of number " << i 
                               << " is a prime number"
                               << std::endl;
    }

    return 0;
} 

这个程序有一个for循环,一个while循环和一个if语句。:)