PTA——求n以内k个质数和

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结果也全对,差距啊。。

猜你喜欢

转载自www.cnblogs.com/cxc1357/p/10771444.html