PTA
7-51 求n以内最大的k个素数以及它们的和
1 #include<stdio.h> 2 #include<math.h> 3 4 int isPrime(int n); 5 int main() { 6 int i,cnt=0,n,k,sum; 7 scanf("%d%d",&n,&k); 8 for(i=n; i>=2; i--) { 9 if(i!=2 && isPrime(i) && cnt<k-1) { 10 sum += i; 11 cnt++; 12 printf("%d+",i); 13 } else if(i==2 ||(isPrime(i) && cnt==k-1)) { 14 sum += i; 15 cnt++; 16 printf("%d=",i); 17 } 18 if(cnt==k) break; 19 } 20 printf("%d",sum); 21 } 22 23 int isPrime(int n) { 24 int i,flag = 1; 25 for(i=2; i<=(int)sqrt(n); i++) { 26 if(n%i==0) flag = 0; 27 } 28 return flag; 29 }
我的程序,自己写了几个测试都对,但不知为啥在PTA里全错。。。
1 #include <stdio.h> 2 #include <math.h> 3 #define N 10 4 int isPrime(int p); 5 int main(){ 6 int n, k, i, count, sum=0; 7 int maxPrimes[N]; 8 scanf("%d%d", &n, &k); 9 i = n; 10 count = 0; 11 while(i>0){ 12 if(count<k){ 13 if(isPrime(i)){ 14 maxPrimes[count] = i; 15 sum += i; 16 count++; 17 } 18 } 19 else{ 20 break; 21 } 22 i--; 23 } 24 for(i=0; i<count-1; i++){ 25 printf("%d+", maxPrimes[i]); 26 } 27 printf("%d=%d", maxPrimes[count-1], sum); 28 29 return 0; 30 } 31 int isPrime(int p){ 32 int isPrime=1; 33 int i; 34 if(p<2){ 35 isPrime = 0; 36 } 37 else{ 38 for(i=2; i<=(int)sqrt(p); i++){ 39 /*若p为合数,则必有不大于sqrt(p)的因子*/ 40 if(p%i == 0){ 41 isPrime = 0; 42 break; 43 } 44 } 45 } 46 return isPrime; 47 }
云上的程序,用数组存储比我的实现更自然,当然PTA结果也全对,差距啊。。