蓝桥杯训练 算法提高 三进制数位和 (暴力枚举)

问题描述

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

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

  你的任务是给出合法三进制数的个数。

输入格式

  一行两个非负整数L,R。

输出格式

  一行一个非负整数表示答案。

样例输入

0 0

样例输出

330

数据规模和约定

  保证0<=L<R<=12。

提示

  判断x是否为质数核心代码:for (int i = 2; i * i <= x; ++i) if (x % i == 0) {/*你猜?*/}

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

int main() {
	int n,m,j,k,i,T;
	int a,b,c,d,e,f;
	int L,R;
	scanf("%d%d",&L,&R);
	int sum=0;
	for(a=0;a<=2; a++) 
	{
		for (b=0; b<=2; b++) 
		{
			for (c=0; c<=2; c++) 
			{
				for (d=0; d<=2; d++) 
				{
					for (e=0; e<=2; e++) 
					{
						for (f=0; f<=2; f++) 
						{
							int num = a+b+c+d+e+f;
							if (num>=L&&num<=R) 
							{
								sum++;
								continue;
							}
							if (num==0||num==1)
							continue;
							for (j=2; j*j<=num; j++) 
							{
								if (num%j==0)
									break;
							}
							if (j*j>num) 
							{
								sum++;
								continue;
							}
						}
					}
				}
			}
		}
	}

	printf("%d
",sum);
	return 0;
}
原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451135.html