1104 天长地久——PAT乙级(暴力)

“天长地久数”是指一个 K 位正整数 A,其满足条件为:A 的各位数字之和为 m,A+1 的各位数字之和为 n,且 m 与 n 的最大公约数是一个大于 2 的素数。本题就请你找出这些天长地久数。

输入格式:

输入在第一行给出正整数 N(≤5),随后 N 行,每行给出一对 K(3<K<10)和 m(1<m<90),其含义如题面所述。

输出格式:

对每一对输入的 K 和 m,首先在一行中输出 Case X,其中 X 是输出的编号(从 1 开始);然后一行输出对应的 n 和 A,数字间以空格分隔。如果解不唯一,则每组解占一行,按 n 的递增序输出;若仍不唯一,则按 A 的递增序输出。若解不存在,则在一行中输出 No Solution

输入样例:

2
6 45
7 80

输出样例:

Case 1
10 189999
10 279999
10 369999
10 459999
10 549999
10 639999
10 729999
10 819999
10 909999
Case 2
No Solution

solution:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
ll gcd(ll a,ll b)
{
	return b?gcd(b,a%b):a;
}
bool isprime(ll n)
{
	if(n<2)return false;
	for(int i=2;i<=n/i;i++)
	{
		if(n%i==0)return false;
	}
	return true;
}
ll numsum(ll n)
{
	ll ans=0;
	while(n)
	{
		ans+=n%10;
		n/=10;
	}
	return ans;
}
int main()
{
	ll n;cin>>n;
	for(int i=1;i<=n;i++)
	{
		cout<<"Case "<<i<<endl;
		ll k,m;cin>>k>>m;
		string minn="1"+string(k-1,'0');
		string maxx=string(k,'9');
		ll cnt=0;
		vector<pair<ll,ll> >ans;
		for(ll j=stoll(minn)+99;j<=stoll(maxx);j+=100)
		{
			if(numsum(j)==m)
			{
				ll n=numsum(j+1);
				if(isprime(gcd(m,n)) && gcd(m,n)>2)
				{
					cnt++;
					ans.push_back({n,j});
				}
			}
		}
		if(!cnt)
		{
			cout<<"No Solution"<<endl;
		}
		sort(ans.begin(),ans.end(),[](pair<ll,ll>a,pair<ll,ll>b)
		{
			if(a.first==b.first)return a.second<b.second;
			return a.first<b.first;
		});
		for(auto i:ans)
		{
			cout<<i.first<<' '<<i.second<<endl;
		}
	}
}

 关于a的最后两位为99,翻了一堆答案总结下防止自己忘记。

倒数第一位如果非9,那么a各位相加ka+1各位相加k+1相差1。gcd(k,k+1)显然不满足条件

倒数第二位如果非9,那么a各位相加ma+1各位相加n相差1-9=8,m-8=n;

直观的列出一些数据gcd(n,n+8)

10000 10008 8           10001 10009 1           10002 10010 2           10003 10011 1
10004 10012 4           10005 10013 1           10006 10014 2           10007 10015 1
10008 10016 8           10009 10017 1           10010 10018 2           10011 10019 1
10012 10020 4           10013 10021 1           10014 10022 2           10015 10023 1
10016 10024 8           10017 10025 1           10018 10026 2           10019 10027 1
10020 10028 4           10021 10029 1           10022 10030 2           10023 10031 1
10024 10032 8           10025 10033 1           10026 10034 2           10027 10035 1
10028 10036 4           10029 10037 1           10030 10038 2           10031 10039 1
10032 10040 8           10033 10041 1           10034 10042 2           10035 10043 1
10036 10044 4           10037 10045 1           10038 10046 2           10039 10047 1
10040 10048 8           10041 10049 1           10042 10050 2           10043 10051 1
10044 10052 4           10045 10053 1           10046 10054 2           10047 10055 1
10048 10056 8           10049 10057 1           10050 10058 2           10051 10059 1
10052 10060 4           10053 10061 1           10054 10062 2           10055 10063 1
10056 10064 8           10057 10065 1           10058 10066 2           10059 10067 1
10060 10068 4           10061 10069 1           10062 10070 2           10063 10071 1
10064 10072 8           10065 10073 1           10066 10074 2           10067 10075 1
10068 10076 4           10069 10077 1           10070 10078 2           10071 10079 1
10072 10080 8           10073 10081 1           10074 10082 2           10075 10083 1
10076 10084 4           10077 10085 1           10078 10086 2           10079 10087 1
10080 10088 8           10081 10089 1           10082 10090 2           10083 10091 1
10084 10092 4           10085 10093 1           10086 10094 2           10087 10095 1
10088 10096 8           10089 10097 1           10090 10098 2           10091 10099 1
10092 10100 4           10093 10101 1           10094 10102 2           10095 10103 1
10096 10104 8           10097 10105 1           10098 10106 2           10099 10107 1
10100 10108 4
1 9 1           2 10 2          3 11 1          4 12 4
5 13 1          6 14 2          7 15 1          8 16 8
9 17 1          10 18 2         11 19 1         12 20 4
13 21 1         14 22 2         15 23 1         16 24 8
17 25 1         18 26 2         19 27 1         20 28 4
21 29 1         22 30 2         23 31 1         24 32 8
25 33 1         26 34 2         27 35 1         28 36 4
29 37 1         30 38 2         31 39 1         32 40 8
33 41 1         34 42 2         35 43 1         36 44 4
37 45 1         38 46 2         39 47 1         40 48 8
41 49 1         42 50 2         43 51 1         44 52 4
45 53 1         46 54 2         47 55 1         48 56 8
49 57 1         50 58 2         51 59 1         52 60 4
53 61 1         54 62 2         55 63 1         56 64 8
57 65 1         58 66 2         59 67 1         60 68 4
61 69 1         62 70 2         63 71 1         64 72 8
65 73 1         66 74 2         67 75 1         68 76 4
69 77 1         70 78 2         71 79 1         72 80 8
73 81 1         74 82 2         75 83 1         76 84 4
77 85 1         78 86 2         79 87 1         80 88 8
81 89 1         82 90 2         83 91 1         84 92 4
85 93 1         86 94 2         87 95 1         88 96 8
89 97 1         90 98 2         91 99 1         92 100 4
93 101 1        94 102 2        95 103 1        96 104 8
97 105 1        98 106 2        99 107 1        100 108 4
1000 1008 8             1001 1009 1             1002 1010 2             1003 1011 1
1004 1012 4             1005 1013 1             1006 1014 2             1007 1015 1
1008 1016 8             1009 1017 1             1010 1018 2             1011 1019 1
1012 1020 4             1013 1021 1             1014 1022 2             1015 1023 1
1016 1024 8             1017 1025 1             1018 1026 2             1019 1027 1
1020 1028 4             1021 1029 1             1022 1030 2             1023 1031 1
1024 1032 8             1025 1033 1             1026 1034 2             1027 1035 1
1028 1036 4             1029 1037 1             1030 1038 2             1031 1039 1
1032 1040 8             1033 1041 1             1034 1042 2             1035 1043 1
1036 1044 4             1037 1045 1             1038 1046 2             1039 1047 1
1040 1048 8             1041 1049 1             1042 1050 2             1043 1051 1
1044 1052 4             1045 1053 1             1046 1054 2             1047 1055 1
1048 1056 8             1049 1057 1             1050 1058 2             1051 1059 1
1052 1060 4             1053 1061 1             1054 1062 2             1055 1063 1
1056 1064 8             1057 1065 1             1058 1066 2             1059 1067 1
1060 1068 4             1061 1069 1             1062 1070 2             1063 1071 1
1064 1072 8             1065 1073 1             1066 1074 2             1067 1075 1
1068 1076 4             1069 1077 1             1070 1078 2             1071 1079 1
1072 1080 8             1073 1081 1             1074 1082 2             1075 1083 1
1076 1084 4             1077 1085 1             1078 1086 2             1079 1087 1
1080 1088 8             1081 1089 1             1082 1090 2             1083 1091 1
1084 1092 4             1085 1093 1             1086 1094 2             1087 1095 1
1088 1096 8             1089 1097 1             1090 1098 2             1091 1099 1
1092 1100 4             1093 1101 1             1094 1102 2             1095 1103 1
1096 1104 8             1097 1105 1             1098 1106 2             1099 1107 1
1100 1108 4

由观察所得,gcd(n,n+8)为1、2、4、8,(数学归纳法忘了)

不满足isprime(gcd(m,n)) && gcd(m,n)>2

所以倒数第二位必为9

  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值