题目描述
给定两个四位正整数 a,b,找出这两个数之间(含)所有满足以下条件的数:
1.这个四位数能被 6整除;
2.千位数字与百位数字构成的两位数 AB是一个质数;
3.十位数字与个位数字构成的两位数 CD是一个完全平方数。
完全平方数:可以写成另一个数的平方的数,比如 16(42),25(52)。
输入
输入两个四位正整数 a,b。(1000≤a≤b≤9999)
输出
输出两行。
第一行为从 a到 b之间所有满足条件的数,两个数字之间用空格隔开,最后一个数后没有空格。 第二行为满足条件的数的个数 n。
#include <stdio.h>
#include <math.h>
int main() {
int a,b;
int num = 0;
int i,j,k;
scanf("%d%d", &a, &b);
for (i = a; i <= b; i++) {
int A = i / 1000;
int B = (i % 1000) / 100;
int C = ((i % 1000) % 100) / 10;
int D = ((i % 1000) % 100) % 10;
for (j = 2 ; j <= sqrt(10 * A + B); j++) {
if ((10 * A + B) % j == 0) {
break;
}
}
if (j > sqrt(10 * A + B)) {
//printf("%d ",10 * A + B);
for (k = 0; k <= 9; k++) {
if (10 * C + D == k * k) {
//printf("%d",10 * C + D);
if (i % 6 == 0) {
num++;
if (num != 1)
printf(" ");
printf("%d",i);
}
}
}
}
}
printf("\n");
printf("%d\n",num);
return 0;
}
#include <iostream>
using namespace std;
int is_prime(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0)
return 0;
}
return 1;
}
int is_pow(int n) {
switch (n) {
case 1:
case 4:
case 9:
case 16:
case 25:
case 36:
case 49:
case 64:
case 81: return 1;
}
return 0;
}
int main()
{
int a, b,cnt = 0;
cin >> a >> b;
int flag = 0;
for (int i = a; i <= b; i++) {
if (is_prime(i/100) && i % 6 == 0 && is_pow(i % 100 )){
if (flag) cout << " ";
cout << i;
flag = 1;
cnt++;
}
}
cout << endl << cnt;
return 0;
}