输入t对数 a, b
求(b,a]内的每个数拆成素因子的个数和
这里每个数都可以写成素数的乘积,可以写成几个素数的和就有几个素因子,这里求的是(b,a]内的素因子和
思路:
素数的素因子个数是1
对于非素数A的素因子个数 = A/k + 1 其中k是素数,也是第一个素数,或者K是比A小的数,并且A%k==0
下面是利用K是比A小的数,并且A%k==0
1 void solve(){ 2 Scanner sc = new Scanner(System.in); 3 int t = sc.nextInt(); 4 int a ,b; 5 int MAX = 5000000; 6 int[] arr=new int[MAX+1]; 7 for(int i=2;i<=MAX;i++){ 8 if(i%2==0){ 9 arr[i] = arr[i/2]+1; 10 continue; 11 } 12 for(int j=3;j*j<=i;j+=2){ 13 int k=i/j; 14 if(k*j==i){ 15 arr[i] = arr[k] + 1; 16 break; 17 } 18 } 19 if (arr[i]==0) 20 arr[i] = 1; 21 } 22 for(int i=2;i<=MAX;i++) 23 arr[i]+=arr[i-1]; 24 while(t!=0){ 25 a = sc.nextInt(); 26 b = sc.nextInt(); 27 System.out.println(arr[a]-arr[b]); 28 t--; 29 } 30 }