SPOJ - NDIV无法找到错误

时间:2017-01-31 21:44:35

标签: primes number-theory factorization sieve

我已经实施了筛选方法,它可以正确运行我的测试用例。我使用计数器而不是标志来表示所有数字和访问数字的次数。当我在SPOJ上运行时,它给出了错误的答案。 链接在这里 http://www.spoj.com/problems/NDIV/

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int main(){
vector<long int> vec;
long int sum=0,n,i,j,k,a,b,c;
double root;
cin>>a>>b>>n;
root = sqrt(b);

for(i=1;i<=b;i++) vec.push_back(1);

for(i=2;i<=root;i++){
    k=i;
    c=0;
    for(j=2;j<=b && c<=b;j++){
        c=k*j;

        if(c<=b){
            vec[c-1]++;
        }
    }

}

for(i=a;i<=b;i++){  
    if(sqrt(i)-floor(sqrt(i))!=0){

        if(vec[i-1]*2 == n) {
            sum++;
        }

    }
    else {

        if(vec[i-1]*2-1 == n) {

            sum++;
        }
    }

}
cout<<sum;
}

0 个答案:

没有答案