解题思路:以根号n为界缩小时间复杂度
注意事项:对自身进行判断
#include<iostream> #include<cmath> using namespace std; typedef long long ll; int is_z(ll n){//判断n是否是一个质数(是返回1,否则返回0) for(int i=2;i<=std::sqrt(n);i++){ if(n%i==0) return 0; } return 1; } int main() { int sum=0; ll n; cin>>n; for(int i=2;i<=std::sqrt(n);i++){ if(n%i==0){//(i是n的约数) if(is_z(i)) sum++;//(i是n的约数,且i是质数) if(is_z(n/i)&&(n/i)!=i) {//(判断另一个约数n/i是不是质数) sum++; } } } if(is_z(n)) {//(因为判断是从2开始,没有判断自身情况,在此补充) sum++; } cout<<sum; return 0; }
0.0分
4 人评分
C二级辅导-统计字符 (C语言代码)浏览:528 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:643 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:783 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:484 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:509 |
本人酷爱递归实现很多问题,这里也是浏览:632 |
完数 (C语言代码)浏览:757 |
简单的a+b (C语言代码)浏览:572 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:627 |
找出最长的字符串来 (C语言代码)浏览:1840 |