求1到 n之间能被3整除,且至少有一位数字是5的所有正整数的个数。 (1<n<10000)
时间: 2023-04-01 21:04:29 浏览: 133
这个问题可以用数学方法解决。首先,我们可以列出所有1到n之间能被3整除的数,即3, 6, 9, 12, ...,以此类推。然后,我们可以找出其中至少有一位数字是5的数,即15, 45, 75, 105, ...,以此类推。最后,我们可以统计这些数的个数,即可得到答案。
具体地,我们可以先计算1到n之间能被3整除的数的个数,即n/3(向下取整)。然后,我们可以计算1到n之间能被3整除且最后一位数字是5的数的个数,即n/30(向下取整)。最后,我们可以计算1到n之间能被3整除且倒数第二位数字是5的数的个数,即n/300(向下取整)。由于这些数中有些数既满足最后一位数字是5,又满足倒数第二位数字是5,因此我们需要减去它们的重复部分,即1到n之间能被3整除且最后两位数字是5的数的个数,即n/150(向下取整)。
综上所述,1到n之间能被3整除,且至少有一位数字是5的所有正整数的个数为:
n/3 - n/30 - n/300 + n/150
相关问题
求1到 口之间能被3整除,且至少有一位数字是5的所有正整数的个数。 (1<n<10000)
根据题意,我们可以列出以下条件:
1. 能被3整除
2. 至少有一位数字是5
首先,能被3整除的数的个数为 n/3,其中 n 为上限。其次,至少有一位数字是5的数的个数为 9 * (n/10) + (n/2 - n/10),其中 9 * (n/10) 表示第一位是5,后面9个数字可以是~9中的任意一个,共有 n/10 种情况;(n/2 - n/10) 表示第一位不是5,后面有一位是5,共有 n/2 - n/10 种情况。最后,我们需要减去同时满足以上两个条件的数的个数,即能被3整除且至少有一位数字是5的数的个数。
根据同余定理,能被3整除的数的各位数字之和也必须能被3整除。因此,我们可以将问题转化为:求1到 n 之间各位数字之和能被3整除,且至少有一位数字是5的数的个数。
各位数字之和能被3整除的数的个数为 n/3,其中 n 为上限。至少有一位数字是5的数的个数为 9 * (n/10) + (n/2 - n/10),同上。同时满足以上两个条件的数的个数为 3 * (n/9 - n/90) - (n/3 - n/9),其中 3 * (n/9 - n/90) 表示各位数字之和能被3整除且第一位是5的数的个数,(n/3 - n/9) 表示各位数字之和能被3整除但第一位不是5的数的个数,两者相减即可。
综上所述,求得的答案为 n/3 + 9 * (n/10) + (n/2 - n/10) - (3 * (n/9 - n/90) - (n/3 - n/9))。
打出代码求1到 n之间能被3整除,且至少有一位数字是5的所有正整数的个数。 (1<n<10000)
这个问题可以用代码来解决。以下是一个可能的解决方案:
#include <stdio.h>
int main() {
int n, count = ;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
if (i % 3 == && (i % 10 == 5 || i / 10 % 10 == 5 || i / 100 % 10 == 5 || i / 100 == 5)) {
count++;
}
}
printf("%d\n", count);
return ;
}
这个程序首先读入一个正整数 n,然后使用 for 循环遍历 1 到 n 之间的所有正整数。对于每个正整数,如果它能被 3 整除并且至少有一位数字是 5,就将计数器 count 加一。最后输出 count 的值即可。