100~200之间求素数问题

发布于 2022-09-03 14:10:53 字数 724 浏览 13 评论 0

很简单的题是让求100~200之间的素数,我的思路是大循环套小循环,大循环控制100~200之间的数i,小循环是从2开始到<i的数,用x存储取余得到的结果,sum初始化成1,用来计算sum = sum *x的值,如果sum出现了0的情况,就continue结束小循环,因为出现0 的话肯定是有可以整除的数据了,i自增继续监测
我的代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    int x = 1, s  = 1;
    for (int i = 101; i <= 200; i++){
        s  = 1;
        for (int j = 2; j < i; j++){
            x = i%j;
            s  = s *x;
            if (s  = 0){ 
                continue;
            }
        }
        if (s ){
            cout << i << " " ;
        }
    }
    system("pause");
    return 0;
}

不知道为什么输出来没有结果,我用cout语句测试sum的值全都是0,但是按照这个思路应该第一个数就是素数才对呀?请问为什么会没有素数输出呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

森林迷了鹿 2022-09-10 14:10:53
s = s*x

改为

s = x

话说你乘起来干嘛?

断舍离 2022-09-10 14:10:53

if(s = 0)错了吧。if(s == 0),break才能结束内层循环。

#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    int x = 1, s  = 1;
    for (int i = 101; i <= 200; i++){
        s  = 1;
        for (int j = 2; j < i; j++){
            s = 1;
            x = i % j;
            s  = s * x;
            if (s  == 0){ 
                break;
            }
        }
        if (s){
            cout << i << " " ;
        }
    }
    //system("pause");
    return 0;
}

为什么s变成了0

#include <iostream>
#include <stdio.h>
#include <bitset>

using namespace std;

int main(){
    int x = 1, s  = 1;

    //使用第一次内循环的s值做测试

    //观察a = -2147483648乘上35的值的变化。
    cout << "test\n";
    
    int a = -2147483648;
    cout << a << endl;
    //观察a的二进制位
    bitset<35> bit_a(a);
    cout << bit_a << endl << endl;
    
    //观察b的二进制位
    long long b = a * 35;
    cout << b << endl;
    bitset<40> bit_b(b);
    cout << bit_b << endl << endl;
    //如果此时用int型保存b,会发生截断,这正是下面代码中s连乘过程中发生的
    
    //观察int a = -2147483648 乘上34后发生的变化
    long long c = a * 34;
    cout << c << endl;
    bitset<40> bit_c(c);
    cout << bit_c << endl;//这时候截取为32位int型变量会变成0.

    cout << "test\n";
    //每次溢出后,都将截取32位作为结果保存在s中
    //当s为0,if语句成立,跳出循环
    
    for (int i = 101; i <= 200; i++){
        s  = 1;
        for (int j = 2; j < i; j++){
            //s = 1;
            x = i % j;
            s  = s * x;
            cout << x << ' ' << s << endl;
            if (s  == 0){ 
                break;
            }
        }
        char q;
        cin >> q;
        if (s){
            cout << i << " " ;
        }
    }
    //system("pause");
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文