PTA 乙级 1007 素数对猜想 (20分) C/C++
C++(C改一改输入输出即可)
1 #include<iostream> 2 #include <cmath> 3 using namespace std; 4 5 bool isprime(int i) { 6 for (int j = 2; j <= sqrt(i); ++j) { 7 if (i % j == 0) { 8 return 0; 9 } 10 } 11 return 1; 12 } 13 int main() { 14 int n = 0; 15 int count = 0; 16 int last = -1, now = 0; 17 cin >> n; 18 for (int i = 2; i <= n; ++i) { 19 if (isprime(i)) { 20 now = i; 21 if ((now - last) == 2) { 22 count++; 23 } 24 last = now; 25 } 26 } 27 cout << count; 28 return 0; 29 }
如果按普通的算素数的方法会超时,所以利用平方根的方法提高效率
注意 main 里的 i 一定要能遍历到n本身,否则会少算结果(注意细节)
isprime其实应该做到单一出口,return 标志位会更好
默默地一点点变强,细节决定成败