题目大意:
给定一个不含平方数因子的数 n (即因子都为不相同的素数) ( 3 <= n < 10^5 ) ,让你找出一个 m (2 <= m < n ),使得 n*m也符合不含平方数因子的条件。
思路:
1.找出一个不是n因子的质数。
2.暴力出奇迹。
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cmath> 5 #include <string> 6 #include <cstring> 7 #include <map> 8 using namespace std; 9 const long long maxn = 1e5 + 7; 10 typedef long long ll; 11 /* 找出一个不是n因子的质数 */ 12 bool prime_if[maxn]; 13 int prime[maxn],x; 14 void oulasai(int n) 15 { 16 for(int i=2;i<=n;i++) 17 { 18 if(!prime_if[i]) 19 prime[x++]=i; 20 for(int j=0;j<x;j++) 21 { 22 if(i*prime[j]>n) 23 break; 24 prime_if[i*prime[j]]=true; 25 if(i%prime[j]==0) 26 break; 27 } 28 } 29 } 30 31 int main() 32 { 33 int n,i; 34 cin >> n; 35 oulasai(n); 36 for(i = 0;i < x;i++) 37 { 38 if(n % prime[i]) 39 break; 40 } 41 cout << prime[i] << endl; 42 return 0; 43 }
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cmath> 5 #include <string> 6 #include <cstring> 7 #include <map> 8 using namespace std; 9 const long long maxn = 1e5 + 7; 10 typedef long long ll; 11 12 /* 暴力出奇迹 */ 13 int main() 14 { 15 int n,findnum; 16 cin >> n; 17 for(int i = 2;i < n;i++) 18 { 19 findnum = 1; 20 for(int j = 2; j < sqrt(n*i);j++) 21 { 22 if( (n*i) % (j*j) == 0) 23 { 24 findnum = 0; 25 break; 26 } 27 } 28 if(findnum) 29 { 30 cout << i << endl; 31 break; 32 } 33 34 } 35 36 return 0; 37 }