/* 2015 problem A 一串数字中大于1的素数之和 不超过10组,每组不超过100个数,0结束 */ #include<iostream> using namespace std; /* 原本的想法是,直接计算出素数表 然后判断输入的数组中如果有素数表中的数,那么直接加和,输出答案 但是这种想法,需要每次在素数表中查找元素,运行时间就会很长 我还想过,可以把素数表中判断出来的数字放入容器中,直接调用find方法查找是否存在a[i] 应该也可行 */ int is_prime(int n){ int i; if(n<=1) return 1; for(i=2;i*i<n;i++){ if(n%i==0)return 1; } if(i*i==n)return 1; return 0; } int main(){ int n; while(cin>>n){ int a[n],sum=0; for(int i=0;i<n;i++){ cin>>a[i]; if(is_prime(a[i])==0){ // 逐个查找 cout<<a[i]<<endl; sum+=a[i]; } } cout<<sum<<endl; } return 0; } /* 2015 problem B 压缩字符串,仅含有A-Z,不超过10001个字母。 ABBCCC---->A2B3C */ #include<iostream> #include<map> using namespa