c++:求1到100间的质数?

player02 2014-05-28 11:25:28
程序清单:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i, n;
cout << "1~100间的素数有:" << endl;
for (n = 2; n <= 100; n++)
{
for (i = 2; i <= sqrt(n); i++)
if (n%i == 0)
break;
if (i>sqrt(n))
cout << n << " ";
}
cout << endl;
return 0;
}
请问:if (i>sqrt(n))应该怎么理解?
if (i>sqrt(n))在for (i = 2; i <= sqrt(n); i++)下面,
i不可能大于sqirt(n)吧?
谢谢!!
...全文
5930 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
li4c 2014-05-29
  • 打赏
  • 举报
回复
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= (int)sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}
buyong 2014-05-29
  • 打赏
  • 举报
回复
引用 3 楼 u013254411 的回复:
[quote=引用 1 楼 u011054333 的回复:]
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}
不对,i++是在for (i = 2; i <= sqrt(n); i++)语句中的,当执行if (i>sqrt(n))的时候,上面那个内层for循环是否已经跳出?那此时i又是个什么呢?总感觉i是不可能大于sqrt(n)的啊。。。不太理解。。。[/quote] for跳出了。i就是个变量。可能不可能,你把i和sqrt(n)的结果都打印出来,就知道了。
昆仑道长 2014-05-29
  • 打赏
  • 举报
回复
引用 3 楼 u013254411 的回复:
[quote=引用 1 楼 u011054333 的回复:]
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}
不对,i++是在for (i = 2; i <= sqrt(n); i++)语句中的,当执行if (i>sqrt(n))的时候,上面那个内层for循环是否已经跳出?那此时i又是个什么呢?总感觉i是不可能大于sqrt(n)的啊。。。不太理解。。。[/quote] i有可能大于sqrt(n)的,当n == 11的时候,sqrt(11) = 3.316.... 这样内循环到3的时候,if条件还是无法满足,循环结束,i再自增一次就变成4了,这个时候i=4 > sqrt(11),说明11就是质数啊,然后输出
player02 2014-05-29
  • 打赏
  • 举报
回复
引用 1 楼 u011054333 的回复:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}
不对,i++是在for (i = 2; i <= sqrt(n); i++)语句中的,当执行if (i>sqrt(n))的时候,上面那个内层for循环是否已经跳出?那此时i又是个什么呢?总感觉i是不可能大于sqrt(n)的啊。。。不太理解。。。
player02 2014-05-29
  • 打赏
  • 举报
回复
引用 1 楼 u011054333 的回复:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}
原来是这么回事啊。。。太感谢了!!
乐百川 2014-05-28
  • 打赏
  • 举报
回复
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int i, n;
    cout << "1~100间的素数有:" << endl;
    for (n = 2; n <= 100; n++)
    {
        for (i = 2; i <= sqrt(n); i++)
            if (n%i == 0)
                break;
//                这个循环结束后有两种情况
//                一是可以整除,说明不是质数,直接跳出,此时i<=sqrt(n)
//                二是不可以整除,说明是质数,此时为不满足循环条件跳出
//                i>sqrt(n)
//                当是质数的时候,就会满足i>sqrt(n)输出这个数字
        if (i>sqrt(n))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧