HJ6质数因子这题感觉测试集不完整,输入2147483647这个测试数据很多代码会出现bug,下面提供一段代码。
#include <stdio.h> int isPrime(int a) { int count = 0; if (a == 2 || a == 3) return 1; else { if (((a + 1) % 6 == 0) || ((a - 1) % 6 == 0)) { //由于此筛选的数列为:y = 6x + 1 或 y = 6x - 1,因此得:1、结论:6的倍数减1或加1必定为奇数;2、结论:6的倍数减1或加1的数各位数之和必定不能被3整除; //因此不用考虑2和3; for (int i = 6; i < (a / 3); i += 6) { if (a % (i - 1) == 0) count++; if (a % (i + 1) == 0) count++; if (count > 0) return 0; } return 1; } return 0; } } int main(void) { int n; while(scanf("%d",&n)!=EOF) { if (isPrime(n)) { printf("%d ",n); break; } while(n%2==0){ printf("2 "); n /= 2; } while(n%3==0){ printf("3 "); n /= 3; } while(n%5==0){ printf("5 "); n /= 5; } int tmp = n; int res = n; for(int i=6;i*i<=tmp&&res>=i;i+=6){ while(n%(i-1)==0){ printf("%d ",i-1); n /= (i-1); } while(n%(i+1)==0){ printf("%d ",i+1); n /= (i+1); } } if(n>1)printf("%d " ,n); } return 0; }
有更好想法的同学,麻烦告我一下。