100~200之间求素数问题

墨染白筝
  • 147

很简单的题是让求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,但是按照这个思路应该第一个数就是素数才对呀?请问为什么会没有素数输出呢?

回复
阅读 2.2k
2 个回答
✓ 已被采纳
s = s*x

改为

s = x

话说你乘起来干嘛?

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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏