找不到浮点异常

Unable to find the floating point exception

本文关键字:异常 找不到      更新时间:2023-10-16

此代码显示浮点异常。我知道为什么会发生此错误,但我无法在此代码中找到错误。

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define MAX 10005
vector<int> build_sieve() {
    bool arr[MAX];
    for(int i=2;i<=MAX-1;i++) {
        arr[i]=true;
    }
    arr[0]=false;
    arr[1]=false;
    for(int i=2;i*i<=MAX-1;i++) {
        if(arr[i]==true){
            for(int j=i*i;j<=MAX-1;j=j+i) {
                arr[j]=false;
            }
        }
    }
    vector<int>  v;
    for(int i=2;i<=MAX-1;i++) {
        if(arr[i]==true){
            v.push_back(i);
        }
    }
    return v;
}
int main() {
    // int t;
    // cin>>t;
    vector<int> v =  build_sieve();
    cout<<"Prime no.s"<<endl;
    for(auto i = v.begin();i!=v.end();i++) {
        cout<<*i<<" ";
    }
    int t;
    cin>>t;
    while(t--) {
        int n,len;
        cin>>n>>len;
        ll arr[len];
        for(int i=0;i<=len-1;i++) {
            cin>>arr[i];
        }
        set<ll> s;
        for(int i=0;v[i]<=n&&i<=100001;i++) {
            for(int j=0;j<=len-1;j++) {
                if((arr[j]%v[i])==0) {
                    s.insert(v[i]);
                    cout<<v[i]<<" "<<arr[j]/v[i]<<endl;
                    s.insert(arr[j]/v[i]);
                }
            }
        }
        cout<<s.size()<<endl;
    }
}

某些系统报告整数除以零的浮点异常。 那么,您的代码如何获得其中之一呢? 除以 v[i](%的模运算符是除法(。 v[i]怎么可能为零? 因为您正在访问v向量的末端。

当你构造v时,你的素数列表,你只添加小于MAX的数字,即10005。 但是,在 main 中的 for 循环中,您将自己限制为更大的索引 (i <= 100001 (,这是素数的计数,而不是素数。 一旦你过了v的末尾,你就进入了未定义的行为,这最终会导致异常。