蓝桥杯 算法提高 三进制数位和

来源:互联网 发布:竖琴 知乎 编辑:程序博客网 时间:2024/05/17 05:04

问题描述
  给定L和R,你需要对于每一个6位三进制数(允许前导零),计算其每一个数位上的数字和,设其在十进制下为S。

  一个三进制数被判断为合法,当且仅当S为质数,或者S属于区间[L,R]。

  你的任务是给出合法三进制数的个数。
输入格式
  一行两个非负整数L,R。
输出格式
  一行一个非负整数表示答案。
样例输入
0 0
样例输出
330
数据规模和约定
  保证0<=L

#include <iostream>#include <vector>#include <string>#include <map>using namespace std;bool isPrime(int x) {    if (x < 2) return false;    for (int i = 2; i*i <= x; i++) {        if (x%i == 0)            return false;    }    return true;}int main() {    int l, r,cnt=0;    cin >> l >> r;    for (int i = 0; i < 3; i++) {        for (int j = 0; j < 3; j++) {            for (int k = 0; k < 3; k++) {                for (int ii = 0; ii < 3; ii++) {                    for (int jj = 0; jj < 3; jj++) {                        for (int kk = 0; kk < 3; kk++) {                            int num = i * 100000 + j * 10000 + k * 1000 + ii * 100 + jj * 10 + kk;                            int sum = i + k + j + ii + kk + jj;                            if (isPrime(sum) || (sum >= l&&sum <= r)) {                                cnt++;                            }                        }                    }                }            }        }    }    cout << cnt;    cin >> cnt;    return 0;}