Я работаю над этой проблемой, когда даже я даю ввод больше, чем 5001, это даст мне неправильный ответ
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> long int prime(long int x); long int prime(long int x) { long int c; for ( c = 2 ; c <= x - 1 ; c++ ) { if ( x%c == 0 ) return 0; } return 1; } int main() { long int n,i=1,j=1,k=1; long int sa=0; long int a,b; scanf("%li %li",&a,&b); for(i=1;i<=a;i++) { for(k=1;k<=i;k++,j++) { if(a==i) { if(prime(j)==1) { sa+=j; } if(prime(j+1)==1) { sa+=j+1; } if(prime(j+2)==1) { sa+=j+2; } break; } if(i==a){break;}; } } j=1; for(i=1;i<=b;i++) { for(k=1;k<=i;k++,j++) { if(b==i) { if(prime(j)==1) { sa+=j; } if(prime(j+1)==1) { sa+=j+1; } if(prime(j+2)==1) { sa+=j+2; } break; } } if(i==b){break;} } printf("%li",sa); return 0; }
Что я уже пробовал:
я пробовал делать это с помощью while, но это не сработает
Richard MacCutchan
Что это значит? Что он должен делать и почему он этого не делает?
KarstenK
в вашей основной функции вы должны только зацикливаться до тех пор, пока c <= x / 2 не ускорит работу. Я тоже не понимаю вашего вопроса. Попробуйте добавить некоторые выходные данные отладки, чтобы лучше понять ваш код.
Rick York
Кроме того, лучший способ зацикливания для проверки простых чисел-это сначала проверить 2, затем 3, а затем увеличить на 2. Причина в том, что вы хотите протестировать 2,3,5,7, ... вместо 2,3,4,5,6, потому что это очень неэффективно. Да, вы будете тестировать больше, чем нужно, но только вдвое меньше, и именно в этом заключается преимущество.