HDU 2098 分拆素数和

 

http://acm.hdu.edu.cn/showproblem.php?pid=2098

 

解题思路:打表打出10000以内素数,然后把素数放入到arr数组中,然后看n-arr[i]是不是素数并且不和n-arr[i]值相等,注意每种情况会算两遍,所以要除2。

 

#include <iostream> #include <stdio.h> #include <cmath> #include <string> #define MAX 10001 using namespace std; void GetPrime(int Prime[]) { int i,j,qrt; for (i=4;i<=MAX;i+=2) Prime[i] = 1; qrt = sqrt(MAX); for (i=3;i<=qrt;i++) for(j=i*i;j<=MAX;j+=i) { if (Prime[j] == 1) continue; Prime[j] = 1; } } int main() { int Prime[MAX+5]; int i,n,len=0; int count; int tem; int arr[MAX+5]; memset(Prime,0,sizeof(Prime)); Prime[1]=1; GetPrime(Prime); for (i=2;i<MAX;i++) { if(Prime[i]==0) arr[len++]=i; } while (scanf("%d",&n)!=EOF&&n) { count=0; for (i=0;i<len;i++) { tem=n-arr[i]; if(tem>0) { if(Prime[tem]==0&&arr[i]!=tem) count++; } else break; } cout<<count/2<<endl; } return 0; }

你可能感兴趣的:(HDU 2098 分拆素数和)