本文概述
- C ++
- Java
- Python3
- C#
例子:
输入:L = 1, R = 10有关更简单的方法, 请参阅计算主要因子仅为2和3的范围中的数字.
输出:6
说明:2 = 2 3 = 3 4 = 2 * 2 6 = 2 * 3 8 = 2 * 2 * 2 9 = 3 * 3
输入:L = 100, R = 200
输出:5
方法:
要以最佳方式解决问题, 请执行以下步骤:
- 储存2的所有幂哪个是小于或等于R排列成阵列power2 [].
- 同样, 存储3的所有幂小于或等于R在另一个数组中power3 [].
- 初始化第三个数组power23 []并存储每个元素的成对乘积power2 []与...的每个元素power3 []小于或等于[R.
- 现在适用于任何范围[L, R], 我们将简单地遍历数组power23 []并计算范围内的数字[L, R].
C ++
//C++ program to count the elements
//in the range [L, R] whose prime
//factors are only 2 and 3.#include <
bits/stdc++.h>
using namespace std;
#define ll long long int//Function which will calculate the
//elements in the given range
void calc_ans(ll l, ll r)
{vector<
ll>
power2, power3;
//Store the current power of 2
ll mul2 = 1;
while (mul2 <
= r) {
power2.push_back(mul2);
mul2 *= 2;
}//Store the current power of 3
ll mul3 = 1;
while (mul3 <
= r) {
power3.push_back(mul3);
mul3 *= 3;
}//power23[] will store pairwise product of
//elements of power2 and power3 that are <
=r
vector<
ll>
power23;
for ( int x = 0;
x <
power2.size();
x++) {
for ( int y = 0;
y <
power3.size();
y++) {ll mul = power2[x] * power3[y];
if (mul == 1)
continue ;
//Insert in power23][]
//only if mul<
=r
if (mul <
= r)
power23.push_back(mul);
}
}//Store the required answer
ll ans = 0;
for (ll x : power23) {
if (x>
= l &
&
x <
= r)
ans++;
}//Print the result
cout <
<
ans <
<
endl;
}//Driver code
int main()
{ll l = 1, r = 10;
calc_ans(l, r);
return 0;
}
Java
//Java program to count the elements
//in the range [L, R] whose prime
//factors are only 2 and 3.
import java.util.*;
class GFG{//Function which will calculate the
//elements in the given range
static void calc_ans( int l, int r)
{Vector<
Integer>
power2 = new Vector<
Integer>
(), power3 = new Vector<
Integer>
();
//Store the current power of 2
int mul2 = 1 ;
while (mul2 <
= r)
{
power2.add(mul2);
mul2 *= 2 ;
}//Store the current power of 3
int mul3 = 1 ;
while (mul3 <
= r)
{
power3.add(mul3);
mul3 *= 3 ;
}//power23[] will store pairwise product of
//elements of power2 and power3 that are <
=r
Vector<
Integer>
power23 = new Vector<
Integer>
();
for ( int x = 0 ;
x <
power2.size();
x++)
{
for ( int y = 0 ;
y <
power3.size();
y++)
{
int mul = power2.get(x) *
power3.get(y);
if (mul == 1 )
continue ;
//Insert in power23][]
//only if mul<
=r
if (mul <
= r)
power23.add(mul);
}
}//Store the required answer
int ans = 0 ;
for ( int x : power23)
{
if (x>
= l &
&
x <
= r)
ans++;
}//Print the result
System.out.print(ans + "\n" );
}//Driver code
public static void main(String[] args)
{
int l = 1 , r = 10 ;
calc_ans(l, r);
}
}//This code is contributed by 29AjayKumar
Python3
# Python3 program to count the elements
# in the range [L, R] whose prime
# factors are only 2 and 3. # Function which will calculate the
# elements in the given range
def calc_ans(l, r):power2 = [];
power3 = [];
# Store the current power of 2
mul2 = 1 ;
while (mul2 <
= r):
power2.append(mul2);
mul2 * = 2 ;
# Store the current power of 3
mul3 = 1 ;
while (mul3 <
= r):
power3.append(mul3);
mul3 * = 3 ;
# power23[] will store pairwise
# product of elements of power2
# and power3 that are <
=r
power23 = [];
for x in range ( len (power2)):
for y in range ( len (power3)):mul = power2[x] * power3[y];
if (mul = = 1 ):
continue ;
# Insert in power23][]
# only if mul<
=r
if (mul <
= r):
power23.append(mul);
# Store the required answer
ans = 0 ;
for x in power23:
if (x>
= l and x <
= r):
ans + = 1 ;
# Print the result
print (ans);
# Driver code
if __name__ = = "__main__" : l = 1 ;
r = 10 ;
calc_ans(l, r);
# This code is contributed by AnkitRai01
C#
//C# program to count the elements
//in the range [L, R] whose prime
//factors are only 2 and 3.
using System;
using System.Collections.Generic;
class GFG{//Function which will calculate the
//elements in the given range
static void calc_ans( int l, int r)
{List<
int>
power2 = new List<
int>
(), power3 = new List<
int>
();
//Store the current power of 2
int mul2 = 1;
while (mul2 <
= r)
{
power2.Add(mul2);
mul2 *= 2;
}//Store the current power of 3
int mul3 = 1;
while (mul3 <
= r)
{
power3.Add(mul3);
mul3 *= 3;
}//power23[] will store pairwise product of
//elements of power2 and power3 that are <
=r
List<
int>
power23 = new List<
int>
();
for ( int x = 0;
x <
power2.Count;
x++)
{
for ( int y = 0;
y <
power3.Count;
y++)
{
int mul = power2[x] *
power3[y];
if (mul == 1)
continue ;
//Insert in power23, ]
//only if mul<
=r
if (mul <
= r)
power23.Add(mul);
}
}//Store the required answer
int ans = 0;
foreach ( int x in power23)
{
if (x>
= l &
&
x <
= r)
ans++;
}//Print the result
Console.Write(ans + "\n" );
}//Driver code
public static void Main(String[] args)
{
int l = 1, r = 10;
calc_ans(l, r);
}
}//This code is contributed by 29AjayKumar
输出如下:
6
时间复杂度: O(Log2(R)*Log3(R))
【使用数组从质因数只有2和3的范围中计数数字|S2】注意:该方法可以进一步优化。存储2和3的幂后, 可以使用以下公式计算答案:两个指针而不是生成所有数字
推荐阅读
- 给定字符串中频率为K的每个不同字符的最大索引
- 最新win1064位旗舰版制作详细说明
- 本图文详细教程教你win10系统怎样还原为win764位旗舰版系
- 深度技术windows1064位旗舰版系统最新推荐
- windows10企业版系统激活工具最新推荐
- 最新win10激活工具图文详细教程图解
- 看完你就知道win10系统怎样样制作详细说明
- office2013密钥激活工具制作详细说明
- 最新win10 专业版 激活图文详细教程图解