Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <gmp.h>
- int gcd(int a, int b) {
- int gcd = 1;
- for(int i = 2; i <= ((a < b) ? a : b); i++)
- if(a % i == 0 && b % i == 0)
- gcd = i;
- return gcd;
- }
- int main(int argc, char *argv[]) {
- int n = 100;
- std::vector<bool> sieve(n - 1, true);
- sieve[0] = false;
- sieve[1] = false;
- for(unsigned long i = 2; i <= n; i++) {
- if(sieve[i]) {
- unsigned long k = 2;
- for(unsigned long j = i * k; j < n; k++) {
- sieve[j] = false;
- j = i * k;
- }
- if(sieve[i]) {
- sieve[i] = false;
- int num = 0;
- if(n % i == 0) {
- num = (((n / i) - 1) * i);
- } else {
- num = ((floor(n / i)) * i);
- }
- sieve[num] = true;
- }
- }
- }
- int sum = 1;
- for(unsigned long i = n; i >= 2; i--) {
- if(sieve[i]) {
- bool goodgcd = true;
- for(unsigned long j = i + 1; j <= n; j++) {
- if(sieve[j]) {
- int thisgcd = gcd(i, j);
- if(thisgcd != 1) {
- sieve[i] = false;
- sieve[i / thisgcd] = true;
- goodgcd = false;
- break;
- }
- }
- }
- if(goodgcd) {
- sum += i;
- }
- }
- }
- std::cout << sum << std::endl;
- }
Add Comment
Please, Sign In to add comment