数字197被称为圆形质数,因为数字的所有旋转:197,971和719本身都是质数。
100以下有13个素数:2、3、5、7、11、13、17、31、37、71、73、79和97。
一百万个以下的素数有多少?
我正在尝试做Project Euler #35,但是在想出一种解决方案时遇到了麻烦,该解决方案没有实现任何外部库或筛选算法。
我尝试保持一些基本功能,以创建一个旋转数字并检查其是否为质数的函数。尝试将两个函数结合使用时,我遇到了数据类型问题,并且在管理int和str之间的数据类型时遇到了麻烦,因为它们与我用来存储每次旋转的列表对象相关。
我的代码:
A B ID E
1: a1 b2 3 0.6211421
2: a2 b2 4 0.7421095
3: a1 b2 3 0.3943915
4: a1 b1 1 0.4069439
5: a2 b2 4 0.7796073
6: a1 b2 3 0.5505793
7: a1 b1 1 0.3526222
8: a2 b2 4 0.6906605
9: a1 b1 1 0.2337894
aTempDF <- melt(dT, id.vars = c("A", "B", "ID")) )
A B ID variable value
1: a1 b2 3 E 0.6211421
2: a2 b2 4 E 0.7421095
3: a1 b2 3 E 0.3943915
4: a1 b1 1 E 0.4069439
5: a2 b2 4 E 0.7796073
6: a1 b2 3 E 0.5505793
7: a1 b1 1 E 0.3526222
8: a2 b2 4 E 0.6906605
9: a1 b1 1 E 0.2337894
aTempDF%>%spread(variable, value)
Error: Duplicate identifiers for rows (4, 7, 9), (1, 3, 6), (2, 5, 8)
原样,它返回:
A B ID E1 E2 E3
1: a1 b2 3 0.6211421 0.3943915 0.5505793
2: a2 b2 4 0.7421095 0.7796073 0.6906605
3: a1 b1 1 0.4069439 0.3526222 0.2337894
我该如何解决?
答案 0 :(得分:0)
与其在字符串和整数之间来回移动,不如(而且更快)仅在整数中工作。通过将其取为mod 10来从数字中提取最后一位数字。使用整数除以10来保留其余数字。将最后一位数字提高到10的适当幂(取剩余数字的对数),然后将其加到其余的数字上数字。这样就可以轮流使用原始编号。
当您传递 n 的平方根时,可以通过停止循环来改进is_prime
函数。如果 n 是复合的,则它的至少一个因子必须小于或等于其平方根;例如,如果 n = p × q ,则 p 和 q 等于平方根,或者其中一个小于平方根,另一个大于平方根。
我将把这些想法简化为代码。
答案 1 :(得分:0)
数字相乘,相加,得到数字的个数。将相关的三元组结果存储为字符串。然后比较每个字符串的结果。
E.g: 137 maps to "(21, 11, 3)"
173 maps to "(21, 11, 3)"
然后您只需从数组 A 中获取每个字符串的索引,其中索引是质数。
j = 0;
For or while loop:
j = A.indexOf(someString, j+1);
对于索引 j,您需要 someString 的下一次出现。