如何有效地计算数的阶乘的阶乘.
示例:对于3 =>(3!)!=(6)!= 720
蛮力方式是简单地使用简单的for循环调用阶乘两次,但可以做得更好.
for(i=1;i<=n;i++)
fact=fact*i;
Run Code Online (Sandbox Code Playgroud)
编辑:需要结果为((n!)!)MOD 10 ^ m,其中m是一个整数,0 <= m <= 19
我看到了Databricks-Question并且不明白
在这里引用Databricks-Question:
我有一个Spark Streaming应用程序,它使用SQLContext在流数据上执行SQL语句.当我在Scala中注册自定义UDF时,流应用程序的性能显着下降.详情如下:
声明1:
Select col1, col2 from table1 as t1 join table2 as t2 on t1.foo = t2.bar声明2:
Select col1, col2 from table1 as t1 join table2 as t2 on equals(t1.foo,t2.bar)我使用SQLContext注册自定义UDF,如下所示:
sqlc.udf.register("equals", (s1: String, s2:String) => s1 == s2)在相同的输入和Spark配置上,与Statement1相比,Statement2的性能明显更差(接近100倍).
如何为这些类调用XYZ.doSomething方法:
XYZ.scala
object XYZ {
private def doSomething(i : Int)(implicit s: String): String {
s + i.toString
}
}
Run Code Online (Sandbox Code Playgroud)
XYZTest.scala
class XYZTest extends FunSpec with PrivateMethodTester {
describe("SomeTest") {
it("Can't find a private method named: doSomething :( ") {
implicit lazy val someStr: String = "sahil"
val doSomething = PrivateMethod[String]('doSomething)
val myStr = XYZ invokePrivate doSomething(1)
assert(myStr == "sahil1")
}
}
describe("SomeTest") {
it("This doesn't even compile :( ") {
val doSomething = PrivateMethod[String]('doSomething)
val myStr = XYZ invokePrivate doSomething(1)("sahil") …Run Code Online (Sandbox Code Playgroud) 鉴于其具有键 - 值对的集合(具有类型键 - 值对的顺序不固定,键 - 值对的数目不固定的)一阶字符串:
val s = "key1: val1, key2: (val2.1, val2.2, val2.3), key3: (), key4: val4"
Run Code Online (Sandbox Code Playgroud)
我需要把它们拉成一个不可变的地图,如:
Map("key1" -> "val1",
"key2" -> "(val2.1, val2.2, val2.3)",
"key3" -> "()",
"key4" -> "val4")
Run Code Online (Sandbox Code Playgroud)
我试过这个:
val kvMap = s.split(", ").map(_.split(": ")).map(t => t(0) -> t(1)).toMap
Run Code Online (Sandbox Code Playgroud)
但这失败了,因为在括号中和键值对之间使用了相同的分隔符(逗号).
我可以使用迭代使用堆栈但是想要避免这种情况.
我也尝试写一个正则表达式,可以帮助我做到这一点,但可以使它只适用于1对:
scala> val MyPattern = "([^=]*):(.*)".r
Pattern: scala.util.matching.Regex = ([^=]*):(.*)
^
scala> val MyPattern(k, v) = "key: value"
k: String = key
v: String = " value"
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种功能性的方法来完成这项操作.
我写了这个函数:
int getRandomNumber(int min,int max)
{
srand(time(NULL));
return rand()%(max-min+1);
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
int x=getRandomNumber(0,2);
int y=getRandomNumber(0,2);
Run Code Online (Sandbox Code Playgroud)
但我总是得到相同的x和y值,即x = y总是.
怎么解决?