int main(int argc, char** argv) { int ans = 0; int chainLength = 1; //78498 = pi^-1(1000000) int* primes = (int*)malloc(78498 * sizeof(int)); int i = 2; int c = 0; //make list of primes for (i = 0; i < 1000000; ++i) { if (isPrime(i)) { primes[c] = i; ++c; } } int j; for (i = 0; i < 78498; ++i) { for (j = i+chainLength; j < 78498; ++j) { int temp = partialSum(primes,i,j); if (temp > 1000000) { break; } if (isPrime(temp)) { ans = temp > ans ? temp : ans; chainLength = j - i; } } } printf("%d\n",ans); return 0; }
/** * @param nums: A list of integers * @return: A list of integers includes the index of the first number * and the index of the last number */ vector<int> subarraySum(vector<int> nums){ vector<int> result; if (nums.empty()) return result; vector<pair<int, int>> partialSum(nums.size() + 1); partialSum[0].first = 0; partialSum[0].second = -1; for(int i = 0; i < nums.size(); i++) { partialSum[i+1].first = partialSum[i].first + nums[i]; partialSum[i+1].second = i; if (partialSum[i+1].first == 0) { result.push_back(0); result.push_back(i); return result; } } sort(partialSum.begin(), partialSum.end()); for (int j = 1; j < partialSum.size()-1; j++) { if (partialSum[j].first == partialSum[j+1].first) { result.push_back(partialSum[j].second+1); result.push_back(partialSum[j+1].second); break; // only one solution is needed } } return result; }
UInt QuadratureRule::checkExactnessTriangle() const { // Degre 0: f=1 => exact value : 1/2 Real partialSum(0.0); for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += weight(iterQ); } if ( std::fabs(partialSum - 0.5) > S_exactnessTol) { return 0; } // Degre 1: f=x+y => exact value : 1/3 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0) + quadPointCoor(iterQ,1)) * weight(iterQ); } if ( std::fabs(partialSum - 1.0/3.0) > S_exactnessTol) { return 0; } // Degre 2: f=x*x+3*x*y => exact value : 5/24 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) + 3*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1)) * weight(iterQ); } if ( std::fabs(partialSum - 5.0/24.0) > S_exactnessTol) { return 1; } // Degre 3: f=x*x*y-5*x*y => exact value :-23/120 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1) - 5*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1)) * weight(iterQ); } if ( std::fabs(partialSum + 23.0/120.0) > S_exactnessTol) { return 2; } // Degre 4: f=x*x*x*y - x*y*y + y*y*y*y => exact value : 1/40 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1) - quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1) ) * weight(iterQ); } if ( std::fabs(partialSum - 1.0/40.0) > S_exactnessTol) { return 3; } // Degre 5: f= x^4*y - x*y^2 + y^5 => exact value : 1/84 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += ( std::pow(quadPointCoor(iterQ,0),4.0)*quadPointCoor(iterQ,1) -quadPointCoor(iterQ,0)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1) + std::pow(quadPointCoor(iterQ,1),5.0) ) * weight(iterQ); } if ( std::fabs(partialSum - 1.0/84.0) > S_exactnessTol) { return 4; } return 5; }
UInt QuadratureRule::checkExactnessSegment() const { // Degre 0: f=1 => exact value : 1 Real partialSum(0.0); for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += weight(iterQ); } if ( std::fabs(partialSum - 1.0) > S_exactnessTol) { return 0; } // Degre 1: f=x => exact value: 1/2 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0))*weight(iterQ); } if ( std::fabs(partialSum - 1.0/2.0) > S_exactnessTol) { return 0; } // Degre 2: f=x*x => exact value: 1/3 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/3.0) > S_exactnessTol) { return 1; } // Degre 3: f=x*x*x => exact value: 1/4 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/4.0) > S_exactnessTol) { return 2; } // Degre 4: f=x*x*x*x => exact value: 1/5 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/5.0) > S_exactnessTol) { return 3; } // Degre 5: f=x*x*x*x*x => exact value: 1/6 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) *quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) *quadPointCoor(iterQ,0) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/6.0) > S_exactnessTol) { return 4; } return 5; }
UInt QuadratureRule::checkExactnessTetra() const { // Degre 0: f=1 => exact value : 1/6 Real partialSum(0.0); for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += weight(iterQ); } if ( std::fabs(partialSum - 1.0/6.0) > S_exactnessTol) { return 0; } // Degre 1: f=x+y+2z => exact value: 1/6 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0) + quadPointCoor(iterQ,1) + 2*quadPointCoor(iterQ,2) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/6.0) > S_exactnessTol) { return 0; } // Degre 2: f=x*x + y*z + y*y => exact value: 1/24 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,2) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/24.0) > S_exactnessTol) { return 1; } // Degre 3: f=x*x*x + y*y + y*y*z + x => exact value: 5/72 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,2) + quadPointCoor(iterQ,0) )*weight(iterQ); } if ( std::fabs(partialSum - 5.0/72.0) > S_exactnessTol) { return 2; } // Degre 4: f=x*x*x*x +y*y*z*z + z*z*z => exact value: 1/72 partialSum=0.0; for (UInt iterQ(0); iterQ<M_nbQuadPt; ++iterQ) { partialSum += (quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0)*quadPointCoor(iterQ,0) + quadPointCoor(iterQ,1)*quadPointCoor(iterQ,1)*quadPointCoor(iterQ,2)*quadPointCoor(iterQ,2) + quadPointCoor(iterQ,2)*quadPointCoor(iterQ,2)*quadPointCoor(iterQ,2) )*weight(iterQ); } if ( std::fabs(partialSum - 1.0/72.0) > S_exactnessTol) { return 3; } return 4; }