假设P进制下有个数(abc)~P~,若这个数满足:(abc)~P~ % B == 0,则以下两个等式一定成立:
以上两个式子同时成立的条件是:P % B == 1,所以满足条件的B的个数为P - 1的因子数
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int T = cin.nextInt();
while((T--) != 0) {
int n = cin.nextInt();
solve(n - 1);
}
}
private static void solve(int x) {
int ans = 2;
for(int i = 2;i <= Math.sqrt(x);i++)
if(x % i == 0)
ans += 2;
if((int)Math.sqrt(x) * (int)Math.sqrt(x) == x)
ans--;
System.out.println(ans);
}
}
每个数至少两个因子,一个1,一个本身,所以初始化ans=2,其次,只用遍历到sqrt(x)即可,找到可以除尽的ans就加2,因为每个数的因子都是成对的,最后如果这个数本身就是个完全平方数,那就再减掉一个即可