仅使用 1 个循环语句查找最多 n 位的素数 [关闭]

Posted

技术标签:

【中文标题】仅使用 1 个循环语句查找最多 n 位的素数 [关闭]【英文标题】:find prime numbers up to n digits using only 1 loop statement [closed] 【发布时间】:2021-08-21 00:00:01 【问题描述】:

我是编程新手并试图解决一些问题,在这个问题中,我试图仅使用 1 个循环语句来查找最多 n 位的素数。

【问题讨论】:

也许这很有趣codereview.stackexchange.com/questions/169202/… Why is “Can someone help me?” not an actual question? 记住2是唯一的偶素数,其他都是奇数。 @TimRoberts 我不认为这是不可能的,实际上我是编程新手,所以我只是想练习构建我的逻辑构建,这就是我尝试这个问题的原因,这不是一个作业。这只是一个逻辑构建问题。 需要两个循环。您可以将一个循环隐藏为“递归”,也可以使用 Tapesh 将其中一个循环隐藏在另一个循环中的技巧,但这里仍然存在两个循环。 【参考方案1】:

一个循环和递归:

#include <iostream>
#include <cmath>

#define NUDIGS 3 //number of digits

bool TestPrime(int n, int ndiv)

    if ( n == ndiv )
        return true;
    if ( (n % ndiv) == 0 )
        return false;
    return TestPrime (n, ++ndiv) ;


int main()

    //calculate the max number with BUDIGITS
    int max = pow(10, NUDIGS) - 1;
    std::cout << "testing numbers from 2 to " << max << std::endl;
    int ntot = 0;
    
    //Loop testing every number. '1' is not considered as a prime number.
    for (int i=2; i <= max; i++)
    
         //call a recursive test
         if ( TestPrime(i, 2) )
         
             std::cout << i << " is prime " << std::endl;
             ntot++;
         
    
    std::cout << ntot << " prime numbers found" << std::endl;

【讨论】:

感谢您的帮助!我明白其中的逻辑。【参考方案2】:
//this program will print prime number from 2 to N . and break loop 
without using break statment

#include <iostream>

using namespace std;
int main() 
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int range;
    cin>>range;
    int num=2;
    for(int i=2;i<=num;i++)
        if(num>range)
            i=num+1;
        
        else
            if(i==num)
                cout<<num<<" ";
                i=1;
                num=num+1;
            
            else if(num%i==0)
                i=1;
                num=num+1;
            
        
    
    cout<<endl;
    return 0;

【讨论】:

感谢您的帮助。 不要建议在 Stack Overflow 上的回答中使用 #include &lt;bits/stdc++.h&gt;。请参阅:Why should I not #include <bits/stdc++.h>?。您应该编辑您的帖子以包含所需的 standard 标头,否则您可能会收到反对票。 @AdrianMole 哦,对不起……让我改一下……?? 为什么你从 2 开始并以 1 递增?这意味着您将浪费时间检查事件编号。您可以从 3 开始并以 2 递增来减少 50% 的时间。数字 2 是唯一的偶数。其他都是奇怪的。 好吧好吧我明白了……你想说我应该做 num=3;然后 num=num+2;而且也没有偶数所以我应该做 i=3;并按 i=i+2 递增;我说的对吗?

以上是关于仅使用 1 个循环语句查找最多 n 位的素数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

算法优化分析---打印素数

1007. 素数对猜想 (20) Java

求100以内的所有质数(素数) 要求:用VB的for语句写

第四周:循环控制

c语言for循环求高手讲解一下下面这道题--输出100以内的素数。

Python语法基础实验闯关