一. 求因子的个数
题意大概是,输入一个数,输出这个数因子的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int main() { int n; cin >> n; int cnt = 2; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { if(i == sqrt(n) && n%i == i) cnt += 1; else cnt += 2; } } if(n == 1) cout << "1" << endl; else cout << cnt << endl;
}
|
二.
![](求因子个数/2019-12-03 11-45-30屏幕截图.png)
- 首先预处理数组,预处理出1~1000000的因子数,然后再进行查询,这样能够减少查询时间。
- 1的因子只有自己,从2开始,若遍历到两个因子数相同,则加1;若不同则加2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MOD = 1073741824; const int MAXN = 1e6 + 10; int arr[MAXN];
void init() { arr[1] = 1; for(int i=2;i<MAXN;i++) arr[i] = 2;
for(int i=2;i*i<MAXN;i++) { for(int j=i;j*i<MAXN;j++) { if(i == j) arr[i*j] += 1; else arr[i*j] += 2; } } } int main() { int a,b,c; int ans = 0; init(); scanf("%d %d %d",&a,&b,&c); for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { for(int k=1; k<=c;k++) { ans = ans + arr[i*j*k]; if(ans > MOD) ans = ans % MOD; } } } printf("%d\n",ans); return 0; }
|
三. L1-006 连续因子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <iostream> #include <cmath> using namespace std;
int isPrime(int n) { for(int i=2;i<=sqrt(n)+1;i++) { if(n%i==0) return 0; } return 1; }
int main() { int n,sum,maxn=0,i,j,flag=0; cin >> n; if(isPrime(n)) { cout << "1" << endl; cout << n <<endl; } else { for(i=2;i<=sqrt(n)+1;i++) { if(n%i ==0) { sum = i; for(j=i+1;j<=sqrt(n)+1;j++) { sum = sum*j; if(n%sum != 0) break; } if((j-i)>maxn) { maxn = j-i; flag = i; } } } cout << maxn <<endl; for(i=flag;i<(flag+maxn);i++) { if(flag != i) cout << "*"; cout << i; } }
return 0; }
|
LeetCode 丑数
只包含质因数的正整数就是丑数
通过while循环不断判断2,3,5是否num的质数,如果是则继续判断,直到num为1。
最后通过return判断num满不满足为1。
1 2 3 4 5 6 7 8 9 10 11
| bool isUgly(int num) { if(num == 0) return false; while(num % 2 == 0) num /= 2; while(num % 3 == 0) num /= 3; while(num % 5 == 0 ) num /= 5; return num == 1; }
|