PAT(乙级)2019年秋季考试 7-4 天长地久

mac2022-06-30  126

#include<bits/stdc++.h> using namespace std; struct ans{ int shuzihe; int shu; }; int gcd(int a,int b){ if(a%b==0) return b; else return gcd(b,a%b); } bool isprime(int a){ if(a<=2) return false; for(int i=2;i*i<=a;i++) { if(a%i==0) return false; } return true; } //求一个正整数的各位数字之和 int dsum(int n){ int sum=0; while(n!=0){ sum=sum+n; n=n/10; } return sum; } bool cmp(ans a,ans b){ if(a.shuzihe!=b.shuzihe) return a.shuzihe<b.shuzihe; else return a.shu<b.shu; } int main(){ int N; cin>>N; int k,m; //对每一对k和m,如果解不唯一,则每组解存放在结构体c中 //ans c[10000]={0}; for(int i=0;i<N;i++){ //memset(c,0,sizeof(c)); ans c[10000]; cin>>k>>m; //最小的k位正整数 int min=pow(10,k-1); //最大的k位正整数 long long max=min*10-1; int count=0; cout<<"Case "<<i+1<<endl; for(int j=min+9;j<=max;j=j+10){//j就是A int num=0; if(dsum(j)==m){//如果j(A)的各位数字之和是m if(isprime(gcd(dsum(j+1),m))){//j+1的各位数字之和(n)和m的最大公约数是大于2的素数 c[count].shuzihe=dsum(j+1);//存放n c[count].shu=j;//存放A count++; } } } if(count==0) printf("No Solution\n"); sort(c,c+count,cmp); for(int j=0;j<count;j++){ printf("%d %d\n",c[j].shuzihe,c[j].shu); } } return 0; }

 

最新回复(0)